Package init
This commit is contained in:
commit
5244593cc2
270
CVE-2018-12697.patch
Normal file
270
CVE-2018-12697.patch
Normal file
@ -0,0 +1,270 @@
|
|||||||
|
From 03e51746ed98d9106803f6009ebd71ea670ad3b9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: nickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>
|
||||||
|
Date: Fri, 7 Dec 2018 10:33:30 +0000
|
||||||
|
Subject: [PATCH] Add a recursion limit to libiberty's demangling code. The
|
||||||
|
limit is enabled by default, but can be disabled via a new demangling option.
|
||||||
|
|
||||||
|
include * demangle.h (DMGL_NO_RECURSE_LIMIT): Define.
|
||||||
|
(DEMANGLE_RECURSION_LIMIT): Define
|
||||||
|
|
||||||
|
PR 87681
|
||||||
|
PR 87675
|
||||||
|
PR 87636
|
||||||
|
PR 87350
|
||||||
|
PR 87335
|
||||||
|
libiberty * cp-demangle.h (struct d_info): Add recursion_level field.
|
||||||
|
* cp-demangle.c (d_function_type): Add recursion counter.
|
||||||
|
If the recursion limit is reached and the check is not disabled,
|
||||||
|
then return with a failure result.
|
||||||
|
(cplus_demangle_init_info): Initialise the recursion_level field.
|
||||||
|
(d_demangle_callback): If the recursion limit is enabled, check
|
||||||
|
for a mangled string that is so long that there is not enough
|
||||||
|
stack space for the local arrays.
|
||||||
|
* cplus-dem.c (struct work): Add recursion_level field.
|
||||||
|
(squangle_mop_up): Set the numb and numk fields to zero.
|
||||||
|
(work_stuff_copy_to_from): Handle the case where a btypevec or
|
||||||
|
ktypevec field is NULL.
|
||||||
|
(demangle_nested_args): Add recursion counter. If
|
||||||
|
the recursion limit is not disabled and reached, return with a
|
||||||
|
failure result.
|
||||||
|
|
||||||
|
|
||||||
|
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@266886 138bc75d-0d04-0410-961f-82ee72b054a4
|
||||||
|
---
|
||||||
|
include/demangle.h | 11 +++++++++++
|
||||||
|
libiberty/cp-demangle.c | 51 ++++++++++++++++++++++++++++++++++++++-----------
|
||||||
|
libiberty/cp-demangle.h | 3 +++
|
||||||
|
libiberty/cplus-dem.c | 37 +++++++++++++++++++++++++++++++++--
|
||||||
|
4 files changed, 89 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/include/demangle.h b/include/demangle.h
|
||||||
|
index 4f920f2..1e67fe2 100644
|
||||||
|
--- a/include/demangle.h
|
||||||
|
+++ b/include/demangle.h
|
||||||
|
@@ -68,6 +68,17 @@ extern "C" {
|
||||||
|
/* If none of these are set, use 'current_demangling_style' as the default. */
|
||||||
|
#define DMGL_STYLE_MASK (DMGL_AUTO|DMGL_GNU|DMGL_LUCID|DMGL_ARM|DMGL_HP|DMGL_EDG|DMGL_GNU_V3|DMGL_JAVA|DMGL_GNAT|DMGL_DLANG|DMGL_RUST)
|
||||||
|
|
||||||
|
+/* Disable a limit on the depth of recursion in mangled strings.
|
||||||
|
+ Note if this limit is disabled then stack exhaustion is possible when
|
||||||
|
+ demangling pathologically complicated strings. Bug reports about stack
|
||||||
|
+ exhaustion when the option is enabled will be rejected. */
|
||||||
|
+#define DMGL_NO_RECURSE_LIMIT (1 << 18)
|
||||||
|
+
|
||||||
|
+/* If DMGL_NO_RECURSE_LIMIT is not enabled, then this is the value used as
|
||||||
|
+ the maximum depth of recursion allowed. It should be enough for any
|
||||||
|
+ real-world mangled name. */
|
||||||
|
+#define DEMANGLE_RECURSION_LIMIT 1024
|
||||||
|
+
|
||||||
|
/* Enumeration of possible demangling styles.
|
||||||
|
|
||||||
|
Lucid and ARM styles are still kept logically distinct, even though
|
||||||
|
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
|
||||||
|
index a1f74a5..47bbc94 100644
|
||||||
|
--- a/libiberty/cp-demangle.c
|
||||||
|
+++ b/libiberty/cp-demangle.c
|
||||||
|
@@ -2852,21 +2852,35 @@ d_ref_qualifier (struct d_info *di, struct demangle_component *sub)
|
||||||
|
static struct demangle_component *
|
||||||
|
d_function_type (struct d_info *di)
|
||||||
|
{
|
||||||
|
- struct demangle_component *ret;
|
||||||
|
+ struct demangle_component *ret = NULL;
|
||||||
|
|
||||||
|
- if (! d_check_char (di, 'F'))
|
||||||
|
- return NULL;
|
||||||
|
- if (d_peek_char (di) == 'Y')
|
||||||
|
+ if ((di->options & DMGL_NO_RECURSE_LIMIT) == 0)
|
||||||
|
{
|
||||||
|
- /* Function has C linkage. We don't print this information.
|
||||||
|
- FIXME: We should print it in verbose mode. */
|
||||||
|
- d_advance (di, 1);
|
||||||
|
+ if (di->recursion_level > DEMANGLE_RECURSION_LIMIT)
|
||||||
|
+ /* FIXME: There ought to be a way to report
|
||||||
|
+ that the recursion limit has been reached. */
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ di->recursion_level ++;
|
||||||
|
}
|
||||||
|
- ret = d_bare_function_type (di, 1);
|
||||||
|
- ret = d_ref_qualifier (di, ret);
|
||||||
|
|
||||||
|
- if (! d_check_char (di, 'E'))
|
||||||
|
- return NULL;
|
||||||
|
+ if (d_check_char (di, 'F'))
|
||||||
|
+ {
|
||||||
|
+ if (d_peek_char (di) == 'Y')
|
||||||
|
+ {
|
||||||
|
+ /* Function has C linkage. We don't print this information.
|
||||||
|
+ FIXME: We should print it in verbose mode. */
|
||||||
|
+ d_advance (di, 1);
|
||||||
|
+ }
|
||||||
|
+ ret = d_bare_function_type (di, 1);
|
||||||
|
+ ret = d_ref_qualifier (di, ret);
|
||||||
|
+
|
||||||
|
+ if (! d_check_char (di, 'E'))
|
||||||
|
+ ret = NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if ((di->options & DMGL_NO_RECURSE_LIMIT) == 0)
|
||||||
|
+ di->recursion_level --;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -6203,6 +6217,7 @@ cplus_demangle_init_info (const char *mangled, int options, size_t len,
|
||||||
|
di->expansion = 0;
|
||||||
|
di->is_expression = 0;
|
||||||
|
di->is_conversion = 0;
|
||||||
|
+ di->recursion_level = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Internal implementation for the demangler. If MANGLED is a g++ v3 ABI
|
||||||
|
@@ -6242,6 +6257,20 @@ d_demangle_callback (const char *mangled, int options,
|
||||||
|
|
||||||
|
cplus_demangle_init_info (mangled, options, strlen (mangled), &di);
|
||||||
|
|
||||||
|
+ /* PR 87675 - Check for a mangled string that is so long
|
||||||
|
+ that we do not have enough stack space to demangle it. */
|
||||||
|
+ if (((options & DMGL_NO_RECURSE_LIMIT) == 0)
|
||||||
|
+ /* This check is a bit arbitrary, since what we really want to do is to
|
||||||
|
+ compare the sizes of the di.comps and di.subs arrays against the
|
||||||
|
+ amount of stack space remaining. But there is no portable way to do
|
||||||
|
+ this, so instead we use the recursion limit as a guide to the maximum
|
||||||
|
+ size of the arrays. */
|
||||||
|
+ && (unsigned long) di.num_comps > DEMANGLE_RECURSION_LIMIT)
|
||||||
|
+ {
|
||||||
|
+ /* FIXME: We need a way to indicate that a stack limit has been reached. */
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
{
|
||||||
|
#ifdef CP_DYNAMIC_ARRAYS
|
||||||
|
__extension__ struct demangle_component comps[di.num_comps];
|
||||||
|
diff --git a/libiberty/cp-demangle.h b/libiberty/cp-demangle.h
|
||||||
|
index 51b8a24..d87a830 100644
|
||||||
|
--- a/libiberty/cp-demangle.h
|
||||||
|
+++ b/libiberty/cp-demangle.h
|
||||||
|
@@ -122,6 +122,9 @@ struct d_info
|
||||||
|
/* Non-zero if we are parsing the type operand of a conversion
|
||||||
|
operator, but not when in an expression. */
|
||||||
|
int is_conversion;
|
||||||
|
+ /* If DMGL_NO_RECURSE_LIMIT is not active then this is set to
|
||||||
|
+ the current recursion level. */
|
||||||
|
+ unsigned int recursion_level;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* To avoid running past the ending '\0', don't:
|
||||||
|
diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c
|
||||||
|
index 4f29d54..48c0cfd 100644
|
||||||
|
--- a/libiberty/cplus-dem.c
|
||||||
|
+++ b/libiberty/cplus-dem.c
|
||||||
|
@@ -146,6 +146,7 @@ struct work_stuff
|
||||||
|
int *proctypevec; /* Indices of currently processed remembered typevecs. */
|
||||||
|
int proctypevec_size;
|
||||||
|
int nproctypes;
|
||||||
|
+ unsigned int recursion_level;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define PRINT_ANSI_QUALIFIERS (work -> options & DMGL_ANSI)
|
||||||
|
@@ -1292,12 +1293,14 @@ squangle_mop_up (struct work_stuff *work)
|
||||||
|
free ((char *) work -> btypevec);
|
||||||
|
work->btypevec = NULL;
|
||||||
|
work->bsize = 0;
|
||||||
|
+ work->numb = 0;
|
||||||
|
}
|
||||||
|
if (work -> ktypevec != NULL)
|
||||||
|
{
|
||||||
|
free ((char *) work -> ktypevec);
|
||||||
|
work->ktypevec = NULL;
|
||||||
|
work->ksize = 0;
|
||||||
|
+ work->numk = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1331,8 +1334,15 @@ work_stuff_copy_to_from (struct work_stuff *to, struct work_stuff *from)
|
||||||
|
|
||||||
|
for (i = 0; i < from->numk; i++)
|
||||||
|
{
|
||||||
|
- int len = strlen (from->ktypevec[i]) + 1;
|
||||||
|
+ int len;
|
||||||
|
+
|
||||||
|
+ if (from->ktypevec[i] == NULL)
|
||||||
|
+ {
|
||||||
|
+ to->ktypevec[i] = NULL;
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
+ len = strlen (from->ktypevec[i]) + 1;
|
||||||
|
to->ktypevec[i] = XNEWVEC (char, len);
|
||||||
|
memcpy (to->ktypevec[i], from->ktypevec[i], len);
|
||||||
|
}
|
||||||
|
@@ -1342,8 +1352,15 @@ work_stuff_copy_to_from (struct work_stuff *to, struct work_stuff *from)
|
||||||
|
|
||||||
|
for (i = 0; i < from->numb; i++)
|
||||||
|
{
|
||||||
|
- int len = strlen (from->btypevec[i]) + 1;
|
||||||
|
+ int len;
|
||||||
|
+
|
||||||
|
+ if (from->btypevec[i] == NULL)
|
||||||
|
+ {
|
||||||
|
+ to->btypevec[i] = NULL;
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
+ len = strlen (from->btypevec[i]) + 1;
|
||||||
|
to->btypevec[i] = XNEWVEC (char , len);
|
||||||
|
memcpy (to->btypevec[i], from->btypevec[i], len);
|
||||||
|
}
|
||||||
|
@@ -1401,6 +1418,7 @@ delete_non_B_K_work_stuff (struct work_stuff *work)
|
||||||
|
|
||||||
|
free ((char*) work->tmpl_argvec);
|
||||||
|
work->tmpl_argvec = NULL;
|
||||||
|
+ work->ntmpl_args = 0;
|
||||||
|
}
|
||||||
|
if (work->previous_argument)
|
||||||
|
{
|
||||||
|
@@ -4478,6 +4496,7 @@ remember_Btype (struct work_stuff *work, const char *start,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Lose all the info related to B and K type codes. */
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
forget_B_and_K_types (struct work_stuff *work)
|
||||||
|
{
|
||||||
|
@@ -4503,6 +4522,7 @@ forget_B_and_K_types (struct work_stuff *work)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
/* Forget the remembered types, but not the type vector itself. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
@@ -4697,6 +4717,16 @@ demangle_nested_args (struct work_stuff *work, const char **mangled,
|
||||||
|
int result;
|
||||||
|
int saved_nrepeats;
|
||||||
|
|
||||||
|
+ if ((work->options & DMGL_NO_RECURSE_LIMIT) == 0)
|
||||||
|
+ {
|
||||||
|
+ if (work->recursion_level > DEMANGLE_RECURSION_LIMIT)
|
||||||
|
+ /* FIXME: There ought to be a way to report
|
||||||
|
+ that the recursion limit has been reached. */
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ work->recursion_level ++;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* The G++ name-mangling algorithm does not remember types on nested
|
||||||
|
argument lists, unless -fsquangling is used, and in that case the
|
||||||
|
type vector updated by remember_type is not used. So, we turn
|
||||||
|
@@ -4723,6 +4753,9 @@ demangle_nested_args (struct work_stuff *work, const char **mangled,
|
||||||
|
--work->forgetting_types;
|
||||||
|
work->nrepeats = saved_nrepeats;
|
||||||
|
|
||||||
|
+ if ((work->options & DMGL_NO_RECURSE_LIMIT) == 0)
|
||||||
|
+ --work->recursion_level;
|
||||||
|
+
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
||||||
16
CVE-2018-19931.patch
Normal file
16
CVE-2018-19931.patch
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
--- a/bfd/elfcode.h 2018-06-25 02:38:57.000000000 +0800
|
||||||
|
+++ b/bfd/elfcode.h 2019-04-04 12:04:52.258000000 +0800
|
||||||
|
@@ -776,7 +776,12 @@ elf_object_p (bfd *abfd)
|
||||||
|
if (i_ehdrp->e_phnum > ((bfd_size_type) -1) / sizeof (*i_phdr))
|
||||||
|
goto got_wrong_format_error;
|
||||||
|
#endif
|
||||||
|
- amt = (bfd_size_type) i_ehdrp->e_phnum * sizeof (*i_phdr);
|
||||||
|
+ /* Check for a corrupt input file with an impossibly large number
|
||||||
|
+ of program headers. */
|
||||||
|
+ if (bfd_get_file_size (abfd) > 0
|
||||||
|
+ && i_ehdrp->e_phnum > bfd_get_file_size (abfd))
|
||||||
|
+ goto got_no_match;
|
||||||
|
+ amt = (bfd_size_type) i_ehdrp->e_phnum * sizeof (*i_phdr);
|
||||||
|
elf_tdata (abfd)->phdr = (Elf_Internal_Phdr *) bfd_alloc (abfd, amt);
|
||||||
|
if (elf_tdata (abfd)->phdr == NULL)
|
||||||
|
goto got_no_match;
|
||||||
29
CVE-2018-19932.patch
Normal file
29
CVE-2018-19932.patch
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
--- a/bfd/elf.c 2019-04-04 11:32:43.076000000 +0800
|
||||||
|
+++ b/bfd/elf.c 2019-04-04 12:09:04.267000000 +0800
|
||||||
|
@@ -6592,6 +6592,7 @@ rewrite_elf_program_header (bfd *ibfd, b
|
||||||
|
the given segment. LMA addresses are compared. */
|
||||||
|
#define IS_CONTAINED_BY_LMA(section, segment, base) \
|
||||||
|
(section->lma >= base \
|
||||||
|
+ && (section->lma + SECTION_SIZE (section, segment) >= section->lma) \
|
||||||
|
&& (section->lma + SECTION_SIZE (section, segment) \
|
||||||
|
<= SEGMENT_END (segment, base)))
|
||||||
|
|
||||||
|
@@ -7114,8 +7115,16 @@ rewrite_elf_program_header (bfd *ibfd, b
|
||||||
|
suggested_lma = output_section;
|
||||||
|
}
|
||||||
|
|
||||||
|
- BFD_ASSERT (map->count > 0);
|
||||||
|
-
|
||||||
|
+ /* PR 23932. A corrupt input file may contain sections that cannot
|
||||||
|
+ be assigned to any segment - because for example they have a
|
||||||
|
+ negative size - or segments that do not contain any sections. */
|
||||||
|
+ if (map->count == 0)
|
||||||
|
+ {
|
||||||
|
+ bfd_set_error (bfd_error_bad_value);
|
||||||
|
+ free (sections);
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* Add the current segment to the list of built segments. */
|
||||||
|
*pointer_to_map = map;
|
||||||
|
pointer_to_map = &map->next;
|
||||||
96
CVE-2019-9075.patch
Normal file
96
CVE-2019-9075.patch
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
From 8abac8031ed369a2734b1cdb7df28a39a54b4b49 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alan Modra <amodra@gmail.com>
|
||||||
|
Date: Wed, 20 Feb 2019 08:21:24 +1030
|
||||||
|
Subject: [PATCH] PR24236, Heap buffer overflow in
|
||||||
|
_bfd_archive_64_bit_slurp_armap
|
||||||
|
|
||||||
|
PR 24236
|
||||||
|
* archive64.c (_bfd_archive_64_bit_slurp_armap): Move code adding
|
||||||
|
sentinel NUL to string buffer nearer to loop where it is used.
|
||||||
|
Don't go past sentinel when scanning strings, and don't write
|
||||||
|
NUL again.
|
||||||
|
* archive.c (do_slurp_coff_armap): Simplify string handling to
|
||||||
|
archive64.c style.
|
||||||
|
---
|
||||||
|
bfd/archive.c | 17 +++++++----------
|
||||||
|
bfd/archive64.c | 10 +++++-----
|
||||||
|
2 files changed, 12 insertions(+), 15 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/bfd/archive.c b/bfd/archive.c
|
||||||
|
index d2d9b72..68a92a3 100644
|
||||||
|
--- a/bfd/archive.c
|
||||||
|
+++ b/bfd/archive.c
|
||||||
|
@@ -1012,6 +1012,7 @@ do_slurp_coff_armap (bfd *abfd)
|
||||||
|
int *raw_armap, *rawptr;
|
||||||
|
struct artdata *ardata = bfd_ardata (abfd);
|
||||||
|
char *stringbase;
|
||||||
|
+ char *stringend;
|
||||||
|
bfd_size_type stringsize;
|
||||||
|
bfd_size_type parsed_size;
|
||||||
|
carsym *carsyms;
|
||||||
|
@@ -1071,22 +1072,18 @@ do_slurp_coff_armap (bfd *abfd)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* OK, build the carsyms. */
|
||||||
|
- for (i = 0; i < nsymz && stringsize > 0; i++)
|
||||||
|
+ stringend = stringbase + stringsize;
|
||||||
|
+ *stringend = 0;
|
||||||
|
+ for (i = 0; i < nsymz; i++)
|
||||||
|
{
|
||||||
|
- bfd_size_type len;
|
||||||
|
-
|
||||||
|
rawptr = raw_armap + i;
|
||||||
|
carsyms->file_offset = swap ((bfd_byte *) rawptr);
|
||||||
|
carsyms->name = stringbase;
|
||||||
|
- /* PR 17512: file: 4a1d50c1. */
|
||||||
|
- len = strnlen (stringbase, stringsize);
|
||||||
|
- if (len < stringsize)
|
||||||
|
- len ++;
|
||||||
|
- stringbase += len;
|
||||||
|
- stringsize -= len;
|
||||||
|
+ stringbase += strlen (stringbase);
|
||||||
|
+ if (stringbase != stringend)
|
||||||
|
+ ++stringbase;
|
||||||
|
carsyms++;
|
||||||
|
}
|
||||||
|
- *stringbase = 0;
|
||||||
|
|
||||||
|
ardata->symdef_count = nsymz;
|
||||||
|
ardata->first_file_filepos = bfd_tell (abfd);
|
||||||
|
diff --git a/bfd/archive64.c b/bfd/archive64.c
|
||||||
|
index 312bf82..42f6ed9 100644
|
||||||
|
--- a/bfd/archive64.c
|
||||||
|
+++ b/bfd/archive64.c
|
||||||
|
@@ -100,8 +100,6 @@ _bfd_archive_64_bit_slurp_armap (bfd *abfd)
|
||||||
|
return FALSE;
|
||||||
|
carsyms = ardata->symdefs;
|
||||||
|
stringbase = ((char *) ardata->symdefs) + carsym_size;
|
||||||
|
- stringbase[stringsize] = 0;
|
||||||
|
- stringend = stringbase + stringsize;
|
||||||
|
|
||||||
|
raw_armap = (bfd_byte *) bfd_alloc (abfd, ptrsize);
|
||||||
|
if (raw_armap == NULL)
|
||||||
|
@@ -115,15 +113,17 @@ _bfd_archive_64_bit_slurp_armap (bfd *abfd)
|
||||||
|
goto release_raw_armap;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ stringend = stringbase + stringsize;
|
||||||
|
+ *stringend = 0;
|
||||||
|
for (i = 0; i < nsymz; i++)
|
||||||
|
{
|
||||||
|
carsyms->file_offset = bfd_getb64 (raw_armap + i * 8);
|
||||||
|
carsyms->name = stringbase;
|
||||||
|
- if (stringbase < stringend)
|
||||||
|
- stringbase += strlen (stringbase) + 1;
|
||||||
|
+ stringbase += strlen (stringbase);
|
||||||
|
+ if (stringbase != stringend)
|
||||||
|
+ ++stringbase;
|
||||||
|
++carsyms;
|
||||||
|
}
|
||||||
|
- *stringbase = '\0';
|
||||||
|
|
||||||
|
ardata->symdef_count = nsymz;
|
||||||
|
ardata->first_file_filepos = bfd_tell (abfd);
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
||||||
20
CVE-2019-9077.patch
Normal file
20
CVE-2019-9077.patch
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
diff --git a/binutils/readelf.c b/binutils/readelf.c
|
||||||
|
index 9439501..31fa9b1 100644
|
||||||
|
--- a/binutils/readelf.c
|
||||||
|
+++ b/binutils/readelf.c
|
||||||
|
@@ -13709,6 +13709,12 @@ process_mips_specific (FILE * file)
|
||||||
|
error (_("No MIPS_OPTIONS header found\n"));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
+ /* PR 24243 */
|
||||||
|
+ if (sect->sh_size < sizeof (* eopt))
|
||||||
|
+ {
|
||||||
|
+ error (_("The MIPS options section is too small.\n"));
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
eopt = (Elf_External_Options *) get_data (NULL, filedata, options_offset, 1,
|
||||||
|
sect->sh_size, _("options"));
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
38
binutils-2.19.50.0.1-output-format.sed
Normal file
38
binutils-2.19.50.0.1-output-format.sed
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# Generate OUTPUT_FORMAT line for .so files from the system linker output.
|
||||||
|
# Imported from glibc/Makerules.
|
||||||
|
|
||||||
|
/ld.*[ ]-E[BL]/b f
|
||||||
|
/collect.*[ ]-E[BL]/b f
|
||||||
|
/OUTPUT_FORMAT[^)]*$/{N
|
||||||
|
s/\n[ ]*/ /
|
||||||
|
}
|
||||||
|
t o
|
||||||
|
: o
|
||||||
|
s/^.*OUTPUT_FORMAT(\([^,]*\), \1, \1).*$/OUTPUT_FORMAT(\1)/
|
||||||
|
t q
|
||||||
|
s/^.*OUTPUT_FORMAT(\([^,]*\), \([^,]*\), \([^,]*\)).*$/\1,\2,\3/
|
||||||
|
t s
|
||||||
|
s/^.*OUTPUT_FORMAT(\([^,)]*\).*$)/OUTPUT_FORMAT(\1)/
|
||||||
|
t q
|
||||||
|
d
|
||||||
|
: s
|
||||||
|
s/"//g
|
||||||
|
G
|
||||||
|
s/\n//
|
||||||
|
s/^\([^,]*\),\([^,]*\),\([^,]*\),B/OUTPUT_FORMAT(\2)/p
|
||||||
|
s/^\([^,]*\),\([^,]*\),\([^,]*\),L/OUTPUT_FORMAT(\3)/p
|
||||||
|
s/^\([^,]*\),\([^,]*\),\([^,]*\)/OUTPUT_FORMAT(\1)/p
|
||||||
|
/,/s|^|*** BUG in libc/scripts/output-format.sed *** |p
|
||||||
|
q
|
||||||
|
: q
|
||||||
|
s/"//g
|
||||||
|
p
|
||||||
|
q
|
||||||
|
: f
|
||||||
|
s/^.*[ ]-E\([BL]\)[ ].*$/,\1/
|
||||||
|
t h
|
||||||
|
s/^.*[ ]-E\([BL]\)$/,\1/
|
||||||
|
t h
|
||||||
|
d
|
||||||
|
: h
|
||||||
|
h
|
||||||
236
binutils-2.20.51.0.2-libtool-lib64.patch
Normal file
236
binutils-2.20.51.0.2-libtool-lib64.patch
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
diff -rcp ../binutils-2.20.51.0.7.original/bfd/configure ./bfd/configure
|
||||||
|
--- a/bfd/configure 2010-04-08 14:53:48.000000000 +0100
|
||||||
|
+++ b/bfd/configure 2010-04-08 14:56:50.000000000 +0100
|
||||||
|
@@ -10762,10 +10762,34 @@
|
||||||
|
# before this can be enabled.
|
||||||
|
hardcode_into_libs=yes
|
||||||
|
|
||||||
|
+ # find out which ABI we are using
|
||||||
|
+ libsuff=
|
||||||
|
+ case "$host_cpu" in
|
||||||
|
+ x86_64*|s390*|powerpc*|ppc*|sparc*)
|
||||||
|
+ echo 'int i;' > conftest.$ac_ext
|
||||||
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
|
+ (eval $ac_compile) 2>&5
|
||||||
|
+ ac_status=$?
|
||||||
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
+ (exit $ac_status); }; then
|
||||||
|
+ case `/usr/bin/file conftest.$ac_objext` in
|
||||||
|
+ *64-bit*)
|
||||||
|
+ libsuff=64
|
||||||
|
+ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then
|
||||||
|
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
|
||||||
|
+ fi
|
||||||
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
+ fi
|
||||||
|
+ rm -rf conftest*
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
+
|
||||||
|
# Append ld.so.conf contents to the search path
|
||||||
|
if test -f /etc/ld.so.conf; then
|
||||||
|
lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
|
||||||
|
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
|
||||||
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We used to test for /lib/ld.so.1 and disable shared libraries on
|
||||||
|
diff -rcp ../binutils-2.20.51.0.7.original/binutils/configure ./binutils/configure
|
||||||
|
--- a/binutils/configure 2010-04-08 14:53:45.000000000 +0100
|
||||||
|
+++ b/binutils/configure 2010-04-08 14:56:21.000000000 +0100
|
||||||
|
@@ -10560,10 +10560,34 @@
|
||||||
|
# before this can be enabled.
|
||||||
|
hardcode_into_libs=yes
|
||||||
|
|
||||||
|
+ # find out which ABI we are using
|
||||||
|
+ libsuff=
|
||||||
|
+ case "$host_cpu" in
|
||||||
|
+ x86_64*|s390*|powerpc*|ppc*|sparc*)
|
||||||
|
+ echo 'int i;' > conftest.$ac_ext
|
||||||
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
|
+ (eval $ac_compile) 2>&5
|
||||||
|
+ ac_status=$?
|
||||||
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
+ (exit $ac_status); }; then
|
||||||
|
+ case `/usr/bin/file conftest.$ac_objext` in
|
||||||
|
+ *64-bit*)
|
||||||
|
+ libsuff=64
|
||||||
|
+ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then
|
||||||
|
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
|
||||||
|
+ fi
|
||||||
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
+ fi
|
||||||
|
+ rm -rf conftest*
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
+
|
||||||
|
# Append ld.so.conf contents to the search path
|
||||||
|
if test -f /etc/ld.so.conf; then
|
||||||
|
lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
|
||||||
|
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
|
||||||
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We used to test for /lib/ld.so.1 and disable shared libraries on
|
||||||
|
diff -rcp ../binutils-2.20.51.0.7.original/gas/configure ./gas/configure
|
||||||
|
--- a/gas/configure 2010-04-08 14:53:47.000000000 +0100
|
||||||
|
+++ b/gas/configure 2010-04-08 14:57:24.000000000 +0100
|
||||||
|
@@ -10547,10 +10547,34 @@
|
||||||
|
# before this can be enabled.
|
||||||
|
hardcode_into_libs=yes
|
||||||
|
|
||||||
|
+ # find out which ABI we are using
|
||||||
|
+ libsuff=
|
||||||
|
+ case "$host_cpu" in
|
||||||
|
+ x86_64*|s390*|powerpc*|ppc*|sparc*)
|
||||||
|
+ echo 'int i;' > conftest.$ac_ext
|
||||||
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
|
+ (eval $ac_compile) 2>&5
|
||||||
|
+ ac_status=$?
|
||||||
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
+ (exit $ac_status); }; then
|
||||||
|
+ case `/usr/bin/file conftest.$ac_objext` in
|
||||||
|
+ *64-bit*)
|
||||||
|
+ libsuff=64
|
||||||
|
+ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then
|
||||||
|
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
|
||||||
|
+ fi
|
||||||
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
+ fi
|
||||||
|
+ rm -rf conftest*
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
+
|
||||||
|
# Append ld.so.conf contents to the search path
|
||||||
|
if test -f /etc/ld.so.conf; then
|
||||||
|
lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
|
||||||
|
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
|
||||||
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We used to test for /lib/ld.so.1 and disable shared libraries on
|
||||||
|
diff -rcp ../binutils-2.20.51.0.7.original/gprof/configure ./gprof/configure
|
||||||
|
--- a/gprof/configure 2010-04-08 14:53:45.000000000 +0100
|
||||||
|
+++ b/gprof/configure 2010-04-08 14:57:50.000000000 +0100
|
||||||
|
@@ -10485,10 +10485,34 @@
|
||||||
|
# before this can be enabled.
|
||||||
|
hardcode_into_libs=yes
|
||||||
|
|
||||||
|
+ # find out which ABI we are using
|
||||||
|
+ libsuff=
|
||||||
|
+ case "$host_cpu" in
|
||||||
|
+ x86_64*|s390*|powerpc*|ppc*|sparc*)
|
||||||
|
+ echo 'int i;' > conftest.$ac_ext
|
||||||
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
|
+ (eval $ac_compile) 2>&5
|
||||||
|
+ ac_status=$?
|
||||||
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
+ (exit $ac_status); }; then
|
||||||
|
+ case `/usr/bin/file conftest.$ac_objext` in
|
||||||
|
+ *64-bit*)
|
||||||
|
+ libsuff=64
|
||||||
|
+ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then
|
||||||
|
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
|
||||||
|
+ fi
|
||||||
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
+ fi
|
||||||
|
+ rm -rf conftest*
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
+
|
||||||
|
# Append ld.so.conf contents to the search path
|
||||||
|
if test -f /etc/ld.so.conf; then
|
||||||
|
lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
|
||||||
|
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
|
||||||
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We used to test for /lib/ld.so.1 and disable shared libraries on
|
||||||
|
diff -rcp ../binutils-2.20.51.0.7.original/ld/configure ./ld/configure
|
||||||
|
--- a/ld/configure 2010-04-08 14:53:44.000000000 +0100
|
||||||
|
+++ b/ld/configure 2010-04-08 14:58:21.000000000 +0100
|
||||||
|
@@ -10966,10 +10966,34 @@
|
||||||
|
# before this can be enabled.
|
||||||
|
hardcode_into_libs=yes
|
||||||
|
|
||||||
|
+ # find out which ABI we are using
|
||||||
|
+ libsuff=
|
||||||
|
+ case "$host_cpu" in
|
||||||
|
+ x86_64*|s390*|powerpc*|ppc*|sparc*)
|
||||||
|
+ echo 'int i;' > conftest.$ac_ext
|
||||||
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
|
+ (eval $ac_compile) 2>&5
|
||||||
|
+ ac_status=$?
|
||||||
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
+ (exit $ac_status); }; then
|
||||||
|
+ case `/usr/bin/file conftest.$ac_objext` in
|
||||||
|
+ *64-bit*)
|
||||||
|
+ libsuff=64
|
||||||
|
+ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then
|
||||||
|
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
|
||||||
|
+ fi
|
||||||
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
+ fi
|
||||||
|
+ rm -rf conftest*
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
+
|
||||||
|
# Append ld.so.conf contents to the search path
|
||||||
|
if test -f /etc/ld.so.conf; then
|
||||||
|
lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
|
||||||
|
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
|
||||||
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We used to test for /lib/ld.so.1 and disable shared libraries on
|
||||||
|
Only in .: .#libtool.m4
|
||||||
|
Only in .: #libtool.m4#
|
||||||
|
diff -rcp ../binutils-2.20.51.0.7.original/opcodes/configure ./opcodes/configure
|
||||||
|
--- a/opcodes/configure 2010-04-08 14:53:45.000000000 +0100
|
||||||
|
+++ b/opcodes/configure 2010-04-08 14:59:10.000000000 +0100
|
||||||
|
@@ -10496,10 +10496,34 @@
|
||||||
|
# before this can be enabled.
|
||||||
|
hardcode_into_libs=yes
|
||||||
|
|
||||||
|
+ # find out which ABI we are using
|
||||||
|
+ libsuff=
|
||||||
|
+ case "$host_cpu" in
|
||||||
|
+ x86_64*|s390*|powerpc*|ppc*|sparc*)
|
||||||
|
+ echo 'int i;' > conftest.$ac_ext
|
||||||
|
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
|
+ (eval $ac_compile) 2>&5
|
||||||
|
+ ac_status=$?
|
||||||
|
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
+ (exit $ac_status); }; then
|
||||||
|
+ case `/usr/bin/file conftest.$ac_objext` in
|
||||||
|
+ *64-bit*)
|
||||||
|
+ libsuff=64
|
||||||
|
+ if test x"$sys_lib_search_path_spec" = x"/lib /usr/lib /usr/local/lib"; then
|
||||||
|
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
|
||||||
|
+ fi
|
||||||
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
+ fi
|
||||||
|
+ rm -rf conftest*
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
+
|
||||||
|
# Append ld.so.conf contents to the search path
|
||||||
|
if test -f /etc/ld.so.conf; then
|
||||||
|
lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
|
||||||
|
- sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
|
||||||
|
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We used to test for /lib/ld.so.1 and disable shared libraries on
|
||||||
28
binutils-2.22.52.0.4-no-config-h-check.patch
Normal file
28
binutils-2.22.52.0.4-no-config-h-check.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
--- a/bfd/bfd-in.h 2012-08-02 10:56:34.561769686 +0100
|
||||||
|
+++ b/bfd/bfd-in.h 2012-08-02 11:13:27.134797755 +0100
|
||||||
|
@@ -25,11 +25,6 @@
|
||||||
|
#ifndef __BFD_H_SEEN__
|
||||||
|
#define __BFD_H_SEEN__
|
||||||
|
|
||||||
|
-/* PR 14072: Ensure that config.h is included first. */
|
||||||
|
-#if !defined PACKAGE && !defined PACKAGE_VERSION
|
||||||
|
-#error config.h must be included before this header
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
--- a/bfd/bfd-in2.h 2012-08-02 10:56:34.349769680 +0100
|
||||||
|
+++ b/bfd/bfd-in2.h 2012-08-02 11:13:40.015798113 +0100
|
||||||
|
@@ -32,11 +32,6 @@
|
||||||
|
#ifndef __BFD_H_SEEN__
|
||||||
|
#define __BFD_H_SEEN__
|
||||||
|
|
||||||
|
-/* PR 14072: Ensure that config.h is included first. */
|
||||||
|
-#if !defined PACKAGE && !defined PACKAGE_VERSION
|
||||||
|
-#error config.h must be included before this header
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
44
binutils-2.25-version.patch
Normal file
44
binutils-2.25-version.patch
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
--- binutils-2.26.orig/bfd/Makefile.am 2016-01-25 10:11:33.505289018 +0000
|
||||||
|
+++ binutils-2.26/bfd/Makefile.am 2016-01-25 10:13:23.489964145 +0000
|
||||||
|
@@ -1043,8 +1043,8 @@ DISTCLEANFILES = $(BUILD_CFILES) $(BUILD
|
||||||
|
bfdver.h: $(srcdir)/version.h $(srcdir)/development.sh $(srcdir)/Makefile.in
|
||||||
|
@echo "creating $@"
|
||||||
|
@bfd_version=`echo "$(VERSION)" | $(SED) -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\
|
||||||
|
- bfd_version_string="\"$(VERSION)\"" ;\
|
||||||
|
- bfd_soversion="$(VERSION)" ;\
|
||||||
|
+ bfd_version_string="\"$(VERSION)-%{release}\"" ;\
|
||||||
|
+ bfd_soversion="$(VERSION)-%{release}" ;\
|
||||||
|
bfd_version_package="\"$(PKGVERSION)\"" ;\
|
||||||
|
report_bugs_to="\"$(REPORT_BUGS_TO)\"" ;\
|
||||||
|
. $(srcdir)/development.sh ;\
|
||||||
|
@@ -1055,7 +1055,7 @@ bfdver.h: $(srcdir)/version.h $(srcdir)/
|
||||||
|
fi ;\
|
||||||
|
$(SED) -e "s,@bfd_version@,$$bfd_version," \
|
||||||
|
-e "s,@bfd_version_string@,$$bfd_version_string," \
|
||||||
|
- -e "s,@bfd_version_package@,$$bfd_version_package," \
|
||||||
|
+ -e "s,@bfd_version_package@,\"version \"," \
|
||||||
|
-e "s,@report_bugs_to@,$$report_bugs_to," \
|
||||||
|
< $(srcdir)/version.h > $@; \
|
||||||
|
echo "$${bfd_soversion}" > libtool-soversion
|
||||||
|
--- binutils-2.26.orig/bfd/Makefile.in 2016-01-25 10:11:33.505289018 +0000
|
||||||
|
+++ binutils-2.26/bfd/Makefile.in 2016-01-25 10:14:17.818297941 +0000
|
||||||
|
@@ -2111,8 +2111,8 @@ stmp-lcoff-h: $(LIBCOFF_H_FILES)
|
||||||
|
bfdver.h: $(srcdir)/version.h $(srcdir)/development.sh $(srcdir)/Makefile.in
|
||||||
|
@echo "creating $@"
|
||||||
|
@bfd_version=`echo "$(VERSION)" | $(SED) -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\
|
||||||
|
- bfd_version_string="\"$(VERSION)\"" ;\
|
||||||
|
- bfd_soversion="$(VERSION)" ;\
|
||||||
|
+ bfd_version_string="\"$(VERSION)-%{release}\"" ;\
|
||||||
|
+ bfd_soversion="$(VERSION)-%{release}" ;\
|
||||||
|
bfd_version_package="\"$(PKGVERSION)\"" ;\
|
||||||
|
report_bugs_to="\"$(REPORT_BUGS_TO)\"" ;\
|
||||||
|
. $(srcdir)/development.sh ;\
|
||||||
|
@@ -2123,7 +2123,7 @@ bfdver.h: $(srcdir)/version.h $(srcdir)/
|
||||||
|
fi ;\
|
||||||
|
$(SED) -e "s,@bfd_version@,$$bfd_version," \
|
||||||
|
-e "s,@bfd_version_string@,$$bfd_version_string," \
|
||||||
|
- -e "s,@bfd_version_package@,$$bfd_version_package," \
|
||||||
|
+ -e "s,@bfd_version_package@,\"version \"," \
|
||||||
|
-e "s,@report_bugs_to@,$$report_bugs_to," \
|
||||||
|
< $(srcdir)/version.h > $@; \
|
||||||
|
echo "$${bfd_soversion}" > libtool-soversion
|
||||||
11
binutils-2.27-aarch64-ifunc.patch
Normal file
11
binutils-2.27-aarch64-ifunc.patch
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
diff -rup binutils.orig/bfd/elfnn-aarch64.c binutils-2.27/bfd/elfnn-aarch64.c
|
||||||
|
--- binutils.orig/bfd/elfnn-aarch64.c 2017-02-21 10:45:19.311956006 +0000
|
||||||
|
+++ binutils-2.27/bfd/elfnn-aarch64.c 2017-02-21 11:55:07.517922655 +0000
|
||||||
|
@@ -4947,6 +4947,7 @@ elfNN_aarch64_final_link_relocate (reloc
|
||||||
|
it here if it is defined in a non-shared object. */
|
||||||
|
if (h != NULL
|
||||||
|
&& h->type == STT_GNU_IFUNC
|
||||||
|
+ && (input_section->flags & SEC_ALLOC)
|
||||||
|
&& h->def_regular)
|
||||||
|
{
|
||||||
|
asection *plt;
|
||||||
124
binutils-2.29-filename-in-error-messages.patch
Normal file
124
binutils-2.29-filename-in-error-messages.patch
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
--- binutils.orig/binutils/readelf.c 2018-01-22 15:48:10.450701702 +0000
|
||||||
|
+++ binutils-2.30.0/binutils/readelf.c 2018-01-22 15:55:26.739588657 +0000
|
||||||
|
@@ -19019,75 +19019,85 @@ process_file (char * file_name)
|
||||||
|
Filedata * filedata = NULL;
|
||||||
|
struct stat statbuf;
|
||||||
|
char armag[SARMAG];
|
||||||
|
- bfd_boolean ret = TRUE;
|
||||||
|
+ bfd_boolean ret = FALSE;
|
||||||
|
+ char * name;
|
||||||
|
+ char * saved_program_name;
|
||||||
|
+
|
||||||
|
+ /* Overload program_name to include file_name. Doing this means
|
||||||
|
+ that warning/error messages will positively identify the file
|
||||||
|
+ concerned even when multiple instances of readelf are running. */
|
||||||
|
+ name = xmalloc (strlen (program_name) + strlen (file_name) + 3);
|
||||||
|
+ sprintf (name, "%s: %s", program_name, file_name);
|
||||||
|
+ saved_program_name = program_name;
|
||||||
|
+ program_name = name;
|
||||||
|
|
||||||
|
if (stat (file_name, &statbuf) < 0)
|
||||||
|
{
|
||||||
|
if (errno == ENOENT)
|
||||||
|
- error (_("'%s': No such file\n"), file_name);
|
||||||
|
+ error (_("No such file\n"));
|
||||||
|
else
|
||||||
|
- error (_("Could not locate '%s'. System error message: %s\n"),
|
||||||
|
- file_name, strerror (errno));
|
||||||
|
- return FALSE;
|
||||||
|
+ error (_("Could not locate file. System error message: %s\n"),
|
||||||
|
+ strerror (errno));
|
||||||
|
+ goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! S_ISREG (statbuf.st_mode))
|
||||||
|
{
|
||||||
|
- error (_("'%s' is not an ordinary file\n"), file_name);
|
||||||
|
- return FALSE;
|
||||||
|
+ error (_("Not an ordinary file\n"));
|
||||||
|
+ goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
filedata = calloc (1, sizeof * filedata);
|
||||||
|
if (filedata == NULL)
|
||||||
|
{
|
||||||
|
error (_("Out of memory allocating file data structure\n"));
|
||||||
|
- return FALSE;
|
||||||
|
+ goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
filedata->file_name = file_name;
|
||||||
|
filedata->handle = fopen (file_name, "rb");
|
||||||
|
if (filedata->handle == NULL)
|
||||||
|
{
|
||||||
|
- error (_("Input file '%s' is not readable.\n"), file_name);
|
||||||
|
- free (filedata);
|
||||||
|
- return FALSE;
|
||||||
|
+ error (_("Not readable\n"));
|
||||||
|
+ goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fread (armag, SARMAG, 1, filedata->handle) != 1)
|
||||||
|
{
|
||||||
|
- error (_("%s: Failed to read file's magic number\n"), file_name);
|
||||||
|
- fclose (filedata->handle);
|
||||||
|
- free (filedata);
|
||||||
|
- return FALSE;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- filedata->file_size = (bfd_size_type) statbuf.st_size;
|
||||||
|
-
|
||||||
|
- if (memcmp (armag, ARMAG, SARMAG) == 0)
|
||||||
|
- {
|
||||||
|
- if (! process_archive (filedata, FALSE))
|
||||||
|
- ret = FALSE;
|
||||||
|
- }
|
||||||
|
- else if (memcmp (armag, ARMAGT, SARMAG) == 0)
|
||||||
|
- {
|
||||||
|
- if ( ! process_archive (filedata, TRUE))
|
||||||
|
- ret = FALSE;
|
||||||
|
+ error (_("Failed to read file's magic number\n"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- if (do_archive_index)
|
||||||
|
- error (_("File %s is not an archive so its index cannot be displayed.\n"),
|
||||||
|
- file_name);
|
||||||
|
+ filedata->file_size = (bfd_size_type) statbuf.st_size;
|
||||||
|
|
||||||
|
- rewind (filedata->handle);
|
||||||
|
- archive_file_size = archive_file_offset = 0;
|
||||||
|
-
|
||||||
|
- if (! process_object (filedata))
|
||||||
|
- ret = FALSE;
|
||||||
|
+ if (memcmp (armag, ARMAG, SARMAG) == 0)
|
||||||
|
+ {
|
||||||
|
+ if (process_archive (filedata, FALSE))
|
||||||
|
+ ret = TRUE;
|
||||||
|
+ }
|
||||||
|
+ else if (memcmp (armag, ARMAGT, SARMAG) == 0)
|
||||||
|
+ {
|
||||||
|
+ if (process_archive (filedata, TRUE))
|
||||||
|
+ ret = TRUE;
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ if (do_archive_index)
|
||||||
|
+ error (_("Not an archive so its index cannot be displayed.\n"));
|
||||||
|
+
|
||||||
|
+ rewind (filedata->handle);
|
||||||
|
+ archive_file_size = archive_file_offset = 0;
|
||||||
|
+
|
||||||
|
+ if (process_object (filedata))
|
||||||
|
+ ret = TRUE;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose (filedata->handle);
|
||||||
|
+ done:
|
||||||
|
free (filedata);
|
||||||
|
+ free (program_name);
|
||||||
|
+ program_name = saved_program_name;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
266
binutils-2.29-revert-PLT-elision.patch
Normal file
266
binutils-2.29-revert-PLT-elision.patch
Normal file
@ -0,0 +1,266 @@
|
|||||||
|
diff -rup binutils.orig/ld/testsuite/ld-i386/pltgot-1.d binutils-2.29.1/ld/testsuite/ld-i386/pltgot-1.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-i386/pltgot-1.d 2017-11-15 13:32:39.335065263 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-i386/pltgot-1.d 2017-11-15 15:03:55.649727195 +0000
|
||||||
|
@@ -2,6 +2,7 @@
|
||||||
|
#readelf: -S --wide
|
||||||
|
#as: --32
|
||||||
|
|
||||||
|
+#pass
|
||||||
|
#...
|
||||||
|
+\[ *[0-9]+\] \.plt +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+10 +.*
|
||||||
|
#...
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-i386/pltgot-2.d binutils-2.29.1/ld/testsuite/ld-i386/pltgot-2.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-i386/pltgot-2.d 2017-11-15 13:32:39.329065335 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-i386/pltgot-2.d 2017-11-15 15:04:20.803430034 +0000
|
||||||
|
@@ -3,7 +3,6 @@
|
||||||
|
#readelf: -d --wide
|
||||||
|
#as: --32
|
||||||
|
|
||||||
|
-#failif
|
||||||
|
#...
|
||||||
|
+0x[0-9a-f]+ +\(PLTREL.*
|
||||||
|
#...
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-i386/pr19636-2d.d binutils-2.29.1/ld/testsuite/ld-i386/pr19636-2d.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-i386/pr19636-2d.d 2017-11-15 13:32:39.336065251 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-i386/pr19636-2d.d 2017-11-15 15:03:00.413379749 +0000
|
||||||
|
@@ -9,7 +9,7 @@ Relocation section '\.rel\.dyn' at offse
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_386_32 +0+ +func
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_386_PC32 +0+ +func
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_386_GLOB_DAT +0+ +func
|
||||||
|
-
|
||||||
|
+#...
|
||||||
|
Symbol table '\.dynsym' contains [0-9]+ entries:
|
||||||
|
+Num: +Value +Size Type +Bind +Vis +Ndx Name
|
||||||
|
#...
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-i386/pr19636-2e.d binutils-2.29.1/ld/testsuite/ld-i386/pr19636-2e.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-i386/pr19636-2e.d 2017-11-15 13:32:39.330065323 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-i386/pr19636-2e.d 2017-11-15 15:03:28.928042882 +0000
|
||||||
|
@@ -9,7 +9,7 @@ Relocation section '\.rel\.dyn' at offse
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_386_32 +0+ +func
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_386_PC32 +0+ +func
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_386_GLOB_DAT +0+ +func
|
||||||
|
-
|
||||||
|
+#...
|
||||||
|
Symbol table '\.dynsym' contains [0-9]+ entries:
|
||||||
|
+Num: +Value +Size Type +Bind +Vis +Ndx Name
|
||||||
|
#...
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/pltgot-1.d binutils-2.29.1/ld/testsuite/ld-x86-64/pltgot-1.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/pltgot-1.d 2017-11-15 13:32:39.415064300 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/pltgot-1.d 2017-11-15 15:08:39.333375801 +0000
|
||||||
|
@@ -2,8 +2,4 @@
|
||||||
|
#readelf: -S --wide
|
||||||
|
#as: --64
|
||||||
|
|
||||||
|
-#...
|
||||||
|
- +\[ *[0-9]+\] \.plt +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+10 +.*
|
||||||
|
-#...
|
||||||
|
- +\[ *[0-9]+\] \.got\.plt +PROGBITS +[0-9a-f]+ +[0-9a-f]+ +0+18 +.*
|
||||||
|
#pass
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/pltgot-2.d binutils-2.29.1/ld/testsuite/ld-x86-64/pltgot-2.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/pltgot-2.d 2017-11-15 13:32:39.404064432 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/pltgot-2.d 2017-11-15 15:08:59.031143095 +0000
|
||||||
|
@@ -3,7 +3,6 @@
|
||||||
|
#readelf: -d --wide
|
||||||
|
#as: --64
|
||||||
|
|
||||||
|
-#failif
|
||||||
|
#...
|
||||||
|
+0x[0-9a-f]+ +\(PLTREL.*
|
||||||
|
#...
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/plt-main-bnd.dd binutils-2.29.1/ld/testsuite/ld-x86-64/plt-main-bnd.dd
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/plt-main-bnd.dd 2017-11-15 13:32:39.405064420 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/plt-main-bnd.dd 2017-11-15 15:06:53.694623801 +0000
|
||||||
|
@@ -1,7 +1,4 @@
|
||||||
|
-#...
|
||||||
|
-Disassembly of section .plt.got:
|
||||||
|
|
||||||
|
-[a-f0-9]+ <[a-z_]+@plt>:
|
||||||
|
-[ ]*[a-f0-9]+: f2 ff 25 .. .. 20 00 bnd jmpq \*0x20....\(%rip\) # ...... <.*>
|
||||||
|
+#...
|
||||||
|
[ ]*[a-f0-9]+: 90 nop
|
||||||
|
#pass
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/plt-main-ibt.dd binutils-2.29.1/ld/testsuite/ld-x86-64/plt-main-ibt.dd
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/plt-main-ibt.dd 2017-11-15 13:32:39.412064336 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/plt-main-ibt.dd 2017-11-15 15:06:35.148842897 +0000
|
||||||
|
@@ -1,7 +1,3 @@
|
||||||
|
#...
|
||||||
|
-Disassembly of section .plt.got:
|
||||||
|
-
|
||||||
|
-[a-f0-9]+ <[_a-z]+@plt>:
|
||||||
|
[ ]*[a-f0-9]+: f3 0f 1e fa endbr64
|
||||||
|
-[ ]*[a-f0-9]+: f2 ff 25 .. .. 20 00 bnd jmpq \*0x20....\(%rip\) # ...... <[_a-z]+>
|
||||||
|
#pass
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/plt-main.rd binutils-2.29.1/ld/testsuite/ld-x86-64/plt-main.rd
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/plt-main.rd 2017-11-15 13:32:39.407064397 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/plt-main.rd 2017-11-15 15:06:17.244054423 +0000
|
||||||
|
@@ -1,4 +1,3 @@
|
||||||
|
-#failif
|
||||||
|
#...
|
||||||
|
[0-9a-f ]+R_X86_64_JUMP_SLOT +0+ +bar \+ 0
|
||||||
|
#...
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr20830a.d binutils-2.29.1/ld/testsuite/ld-x86-64/pr20830a.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/pr20830a.d 2017-11-15 13:32:39.412064336 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/pr20830a.d 2017-11-15 15:15:09.918750288 +0000
|
||||||
|
@@ -20,6 +20,7 @@ Contents of the .eh_frame section:
|
||||||
|
DW_CFA_offset: r16 \(rip\) at cfa-8
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
+#pass
|
||||||
|
|
||||||
|
0+18 0000000000000014 0000001c FDE cie=00000000 pc=00000000000001c8..00000000000001d4
|
||||||
|
DW_CFA_nop
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr20830a-now.d binutils-2.29.1/ld/testsuite/ld-x86-64/pr20830a-now.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/pr20830a-now.d 2017-11-15 13:32:39.413064324 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/pr20830a-now.d 2017-11-15 15:16:08.227055104 +0000
|
||||||
|
@@ -20,6 +20,7 @@ Contents of the .eh_frame section:
|
||||||
|
DW_CFA_offset: r16 \(rip\) at cfa-8
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
+#pass
|
||||||
|
|
||||||
|
0+18 0000000000000014 0000001c FDE cie=00000000 pc=00000000000001c8..00000000000001d4
|
||||||
|
DW_CFA_nop
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr20830b.d binutils-2.29.1/ld/testsuite/ld-x86-64/pr20830b.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/pr20830b.d 2017-11-15 13:32:39.413064324 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/pr20830b.d 2017-11-15 15:16:20.115913358 +0000
|
||||||
|
@@ -20,7 +20,8 @@ Contents of the .eh_frame section:
|
||||||
|
DW_CFA_offset: r16 \(rip\) at cfa-8
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
-
|
||||||
|
+#pass
|
||||||
|
+
|
||||||
|
0+18 0000000000000010 0000001c FDE cie=00000000 pc=0000000000000138..0000000000000144
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr20830b-now.d binutils-2.29.1/ld/testsuite/ld-x86-64/pr20830b-now.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/pr20830b-now.d 2017-11-15 13:32:39.411064348 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/pr20830b-now.d 2017-11-15 15:16:29.012807282 +0000
|
||||||
|
@@ -20,7 +20,8 @@ Contents of the .eh_frame section:
|
||||||
|
DW_CFA_offset: r16 \(rip\) at cfa-8
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
-
|
||||||
|
+#pass
|
||||||
|
+
|
||||||
|
0+18 0000000000000010 0000001c FDE cie=00000000 pc=0000000000000138..0000000000000144
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr21038a.d binutils-2.29.1/ld/testsuite/ld-x86-64/pr21038a.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/pr21038a.d 2017-11-15 13:32:39.408064384 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/pr21038a.d 2017-11-15 15:19:48.097433680 +0000
|
||||||
|
@@ -19,7 +19,8 @@ Contents of the .eh_frame section:
|
||||||
|
DW_CFA_offset: r16 \(rip\) at cfa-8
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
-
|
||||||
|
+#pass
|
||||||
|
+
|
||||||
|
0+18 0000000000000014 0000001c FDE cie=00000000 pc=00000000000001c8..00000000000001d4
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr21038a-now.d binutils-2.29.1/ld/testsuite/ld-x86-64/pr21038a-now.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/pr21038a-now.d 2017-11-15 13:32:39.401064469 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/pr21038a-now.d 2017-11-15 15:10:56.077760324 +0000
|
||||||
|
@@ -20,7 +20,8 @@ Contents of the .eh_frame section:
|
||||||
|
DW_CFA_offset: r16 \(rip\) at cfa-8
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
-
|
||||||
|
+#pass
|
||||||
|
+
|
||||||
|
0+18 0000000000000014 0000001c FDE cie=00000000 pc=00000000000001c8..00000000000001d4
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr21038b.d binutils-2.29.1/ld/testsuite/ld-x86-64/pr21038b.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/pr21038b.d 2017-11-15 13:32:39.405064420 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/pr21038b.d 2017-11-15 15:10:42.828916844 +0000
|
||||||
|
@@ -19,6 +19,7 @@ Contents of the .eh_frame section:
|
||||||
|
DW_CFA_offset: r16 \(rip\) at cfa-8
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
+#pass
|
||||||
|
|
||||||
|
0+18 0000000000000014 0000001c FDE cie=00000000 pc=00000000000001d8..00000000000001dd
|
||||||
|
DW_CFA_nop
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr21038b-now.d binutils-2.29.1/ld/testsuite/ld-x86-64/pr21038b-now.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/pr21038b-now.d 2017-11-15 13:32:39.416064288 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/pr21038b-now.d 2017-11-15 15:11:11.550577531 +0000
|
||||||
|
@@ -20,7 +20,8 @@ Contents of the .eh_frame section:
|
||||||
|
DW_CFA_offset: r16 \(rip\) at cfa-8
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
-
|
||||||
|
+#pass
|
||||||
|
+
|
||||||
|
0+18 0000000000000014 0000001c FDE cie=00000000 pc=00000000000001d8..00000000000001dd
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr21038c.d binutils-2.29.1/ld/testsuite/ld-x86-64/pr21038c.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/pr21038c.d 2017-11-15 13:32:39.411064348 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/pr21038c.d 2017-11-15 15:09:52.664509478 +0000
|
||||||
|
@@ -19,7 +19,8 @@ Contents of the .eh_frame section:
|
||||||
|
DW_CFA_offset: r16 \(rip\) at cfa-8
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
-
|
||||||
|
+#pass
|
||||||
|
+
|
||||||
|
0+18 0000000000000014 0000001c FDE cie=00000000 pc=0000000000000220..0000000000000231
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/pr21038c-now.d binutils-2.29.1/ld/testsuite/ld-x86-64/pr21038c-now.d
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/pr21038c-now.d 2017-11-15 13:32:39.413064324 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/pr21038c-now.d 2017-11-15 15:11:22.975442559 +0000
|
||||||
|
@@ -20,7 +20,8 @@ Contents of the .eh_frame section:
|
||||||
|
DW_CFA_offset: r16 \(rip\) at cfa-8
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
-
|
||||||
|
+#pass
|
||||||
|
+
|
||||||
|
0+18 0000000000000014 0000001c FDE cie=00000000 pc=0000000000000220..0000000000000231
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-x86-64/tlspic2.rd binutils-2.29.1/ld/testsuite/ld-x86-64/tlspic2.rd
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/tlspic2.rd 2017-11-15 13:32:39.417064276 +0000
|
||||||
|
+++ binutils-2.29.1/ld/testsuite/ld-x86-64/tlspic2.rd 2017-11-15 15:05:02.950932110 +0000
|
||||||
|
@@ -14,6 +14,7 @@ Section Headers:
|
||||||
|
+\[[ 0-9]+\] .dynsym +.*
|
||||||
|
+\[[ 0-9]+\] .dynstr +.*
|
||||||
|
+\[[ 0-9]+\] .rela.dyn +.*
|
||||||
|
+#pass
|
||||||
|
+\[[ 0-9]+\] .plt +.*
|
||||||
|
+\[[ 0-9]+\] .plt.got +.*
|
||||||
|
+\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+31a 00 +AX +0 +0 4096
|
||||||
|
--- binutils.orig/bfd/elfxx-x86.c 2018-01-22 15:59:25.875788033 +0000
|
||||||
|
+++ binutils-2.30.0/bfd/elfxx-x86.c 2018-01-22 16:00:20.789146597 +0000
|
||||||
|
@@ -107,7 +107,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
|
||||||
|
plt_entry_size = htab->plt.plt_entry_size;
|
||||||
|
|
||||||
|
resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
|
||||||
|
-
|
||||||
|
+#if 0
|
||||||
|
/* We can't use the GOT PLT if pointer equality is needed since
|
||||||
|
finish_dynamic_symbol won't clear symbol value and the dynamic
|
||||||
|
linker won't update the GOT slot. We will get into an infinite
|
||||||
|
@@ -125,7 +125,7 @@ elf_x86_allocate_dynrelocs (struct elf_l
|
||||||
|
/* Use the GOT PLT. */
|
||||||
|
eh->plt_got.refcount = 1;
|
||||||
|
}
|
||||||
|
-
|
||||||
|
+#endif
|
||||||
|
/* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
|
||||||
|
here if it is defined and referenced in a non-shared object. */
|
||||||
|
if (h->type == STT_GNU_IFUNC
|
||||||
|
--- binutils.orig/ld/testsuite/ld-i386/pr20830.d 2018-07-09 09:49:51.277239857 +0100
|
||||||
|
+++ binutils-2.30.90/ld/testsuite/ld-i386/pr20830.d 2018-07-09 10:32:41.113356733 +0100
|
||||||
|
@@ -19,7 +19,7 @@ Contents of the .eh_frame section:
|
||||||
|
DW_CFA_offset: r8 \(eip\) at cfa-4
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
|
-
|
||||||
|
+#pass
|
||||||
|
0+18 00000010 0000001c FDE cie=00000000 pc=00000128..00000133
|
||||||
|
DW_CFA_nop
|
||||||
|
DW_CFA_nop
|
||||||
33
binutils-2.31-export-demangle.h.patch
Normal file
33
binutils-2.31-export-demangle.h.patch
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
diff -rup binutils.orig/bfd/Makefile.am binutils-2.30.90/bfd/Makefile.am
|
||||||
|
--- binutils.orig/bfd/Makefile.am 2018-07-09 09:49:43.378323137 +0100
|
||||||
|
+++ binutils-2.30.90/bfd/Makefile.am 2018-07-09 09:50:40.252723495 +0100
|
||||||
|
@@ -33,7 +33,7 @@ bfdlibdir = @bfdlibdir@
|
||||||
|
bfdincludedir = @bfdincludedir@
|
||||||
|
bfdlib_LTLIBRARIES = libbfd.la
|
||||||
|
bfdinclude_HEADERS = $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
|
||||||
|
- $(INCDIR)/bfdlink.h $(INCDIR)/diagnostics.h
|
||||||
|
+ $(INCDIR)/bfdlink.h $(INCDIR)/diagnostics.h $(INCDIR)/demangle.h
|
||||||
|
else !INSTALL_LIBBFD
|
||||||
|
# Empty these so that the respective installation directories will not be created.
|
||||||
|
bfdlibdir =
|
||||||
|
diff -rup binutils.orig/bfd/Makefile.in binutils-2.30.90/bfd/Makefile.in
|
||||||
|
--- binutils.orig/bfd/Makefile.in 2018-07-09 09:49:42.757329685 +0100
|
||||||
|
+++ binutils-2.30.90/bfd/Makefile.in 2018-07-09 09:51:16.145345812 +0100
|
||||||
|
@@ -248,7 +248,7 @@ am__can_run_installinfo = \
|
||||||
|
esac
|
||||||
|
am__bfdinclude_HEADERS_DIST = $(INCDIR)/plugin-api.h bfd.h \
|
||||||
|
$(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/bfdlink.h \
|
||||||
|
- $(INCDIR)/diagnostics.h
|
||||||
|
+ $(INCDIR)/diagnostics.h $(INCDIR)/demangle.h
|
||||||
|
HEADERS = $(bfdinclude_HEADERS)
|
||||||
|
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
||||||
|
distclean-recursive maintainer-clean-recursive
|
||||||
|
@@ -467,7 +467,7 @@ libbfd_la_LDFLAGS = $(am__append_1) -rel
|
||||||
|
@INSTALL_LIBBFD_FALSE@bfdinclude_HEADERS = $(am__append_2)
|
||||||
|
@INSTALL_LIBBFD_TRUE@bfdinclude_HEADERS = $(BFD_H) \
|
||||||
|
@INSTALL_LIBBFD_TRUE@ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
|
||||||
|
-@INSTALL_LIBBFD_TRUE@ $(INCDIR)/bfdlink.h \
|
||||||
|
+@INSTALL_LIBBFD_TRUE@ $(INCDIR)/bfdlink.h $(INCDIR)/demangle.h \
|
||||||
|
@INSTALL_LIBBFD_TRUE@ $(INCDIR)/diagnostics.h $(am__append_2)
|
||||||
|
@INSTALL_LIBBFD_FALSE@rpath_bfdlibdir = @bfdlibdir@
|
||||||
|
@INSTALL_LIBBFD_FALSE@noinst_LTLIBRARIES = libbfd.la
|
||||||
BIN
binutils-2.31.1.tar.xz
Normal file
BIN
binutils-2.31.1.tar.xz
Normal file
Binary file not shown.
121
binutils-CVE-2018-17358.patch
Normal file
121
binutils-CVE-2018-17358.patch
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
From 30838132997e6a3cfe3ec11c58b32b22f6f6b102 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alan Modra <amodra@gmail.com>
|
||||||
|
Date: Thu, 20 Sep 2018 15:29:17 +0930
|
||||||
|
Subject: [PATCH 1/1] Bug 23686, two segment faults in nm
|
||||||
|
|
||||||
|
Fixes the bugs exposed by the testcases in the PR, plus two more bugs
|
||||||
|
I noticed when looking at _bfd_stab_section_find_nearest_line.
|
||||||
|
|
||||||
|
PR 23686
|
||||||
|
* dwarf2.c (read_section): Error when attempting to malloc
|
||||||
|
"(bfd_size_type) -1".
|
||||||
|
* syms.c (_bfd_stab_section_find_nearest_line): Bounds check
|
||||||
|
function_name. Bounds check reloc address. Formatting. Ensure
|
||||||
|
.stabstr zero terminated.
|
||||||
|
---
|
||||||
|
diff -urNp a/bfd/ChangeLog b/bfd/ChangeLog
|
||||||
|
--- a/bfd/ChangeLog 2019-06-05 22:52:23.600000000 +0800
|
||||||
|
+++ b/bfd/ChangeLog 2019-06-05 22:55:03.060000000 +0800
|
||||||
|
@@ -1,3 +1,11 @@
|
||||||
|
+2018-09-20 Alan Modra <amodra@gmail.com>
|
||||||
|
+ PR 23686
|
||||||
|
+ * dwarf2.c (read_section): Error when attempting to malloc
|
||||||
|
+ "(bfd_size_type) -1".
|
||||||
|
+ * syms.c (_bfd_stab_section_find_nearest_line): Bounds check
|
||||||
|
+ function_name. Bounds check reloc address. Formatting. Ensure
|
||||||
|
+ .stabstr zero terminated.
|
||||||
|
+
|
||||||
|
2018-07-18 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
2.31.1 Release point.
|
||||||
|
diff -urNp a/bfd/dwarf2.c b/bfd/dwarf2.c
|
||||||
|
--- a/bfd/dwarf2.c 2019-06-05 22:52:23.950000000 +0800
|
||||||
|
+++ b/bfd/dwarf2.c 2019-06-05 23:09:09.540000000 +0800
|
||||||
|
@@ -527,6 +527,7 @@ read_section (bfd * abfd,
|
||||||
|
asection *msec;
|
||||||
|
const char *section_name = sec->uncompressed_name;
|
||||||
|
bfd_byte *contents = *section_buffer;
|
||||||
|
+ bfd_size_type amt;
|
||||||
|
|
||||||
|
/* The section may have already been read. */
|
||||||
|
if (contents == NULL)
|
||||||
|
@@ -549,7 +550,13 @@ read_section (bfd * abfd,
|
||||||
|
*section_size = msec->rawsize ? msec->rawsize : msec->size;
|
||||||
|
/* Paranoia - alloc one extra so that we can make sure a string
|
||||||
|
section is NUL terminated. */
|
||||||
|
- contents = (bfd_byte *) bfd_malloc (*section_size + 1);
|
||||||
|
+ amt = *section_size + 1;
|
||||||
|
+ if (amt == 0)
|
||||||
|
+ {
|
||||||
|
+ bfd_set_error (bfd_error_no_memory);
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+ contents = (bfd_byte *) bfd_malloc (amt);
|
||||||
|
if (contents == NULL)
|
||||||
|
return FALSE;
|
||||||
|
if (syms
|
||||||
|
diff -urNp a/bfd/syms.c b/bfd/syms.c
|
||||||
|
--- a/bfd/syms.c 2019-06-05 22:52:24.840000000 +0800
|
||||||
|
+++ b/bfd/syms.c 2019-06-05 23:38:05.300000000 +0800
|
||||||
|
@@ -1035,6 +1035,11 @@ _bfd_stab_section_find_nearest_line (bfd
|
||||||
|
0, strsize))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
+ /* Stab strings ought to be nul terminated. Ensure the last one
|
||||||
|
+ is, to prevent running off the end of the buffer. */
|
||||||
|
+ info->strs[strsize - 1] = 0;
|
||||||
|
+
|
||||||
|
+
|
||||||
|
/* If this is a relocatable object file, we have to relocate
|
||||||
|
the entries in .stab. This should always be simple 32 bit
|
||||||
|
relocations against symbols defined in this object file, so
|
||||||
|
@@ -1073,7 +1078,8 @@ _bfd_stab_section_find_nearest_line (bfd
|
||||||
|
|| r->howto->bitsize != 32
|
||||||
|
|| r->howto->pc_relative
|
||||||
|
|| r->howto->bitpos != 0
|
||||||
|
- || r->howto->dst_mask != 0xffffffff)
|
||||||
|
+ || r->howto->dst_mask != 0xffffffff
|
||||||
|
+ || r->address * bfd_octets_per_byte (abfd) + 4 > stabsize)
|
||||||
|
{
|
||||||
|
_bfd_error_handler
|
||||||
|
(_("unsupported .stab relocation"));
|
||||||
|
@@ -1195,7 +1201,8 @@ _bfd_stab_section_find_nearest_line (bfd
|
||||||
|
{
|
||||||
|
nul_fun = stab;
|
||||||
|
nul_str = str;
|
||||||
|
- if (file_name >= (char *) info->strs + strsize || file_name < (char *) str)
|
||||||
|
+ if (file_name >= (char *) info->strs + strsize
|
||||||
|
+ || file_name < (char *) str)
|
||||||
|
file_name = NULL;
|
||||||
|
if (stab + STABSIZE + TYPEOFF < info->stabs + stabsize
|
||||||
|
&& *(stab + STABSIZE + TYPEOFF) == (bfd_byte) N_SO)
|
||||||
|
@@ -1206,7 +1213,8 @@ _bfd_stab_section_find_nearest_line (bfd
|
||||||
|
directory_name = file_name;
|
||||||
|
file_name = ((char *) str
|
||||||
|
+ bfd_get_32 (abfd, stab + STRDXOFF));
|
||||||
|
- if (file_name >= (char *) info->strs + strsize || file_name < (char *) str)
|
||||||
|
+ if (file_name >= (char *) info->strs + strsize
|
||||||
|
+ || file_name < (char *) str)
|
||||||
|
file_name = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -1217,7 +1225,8 @@ _bfd_stab_section_find_nearest_line (bfd
|
||||||
|
file_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
|
||||||
|
/* PR 17512: file: 0c680a1f. */
|
||||||
|
/* PR 17512: file: 5da8aec4. */
|
||||||
|
- if (file_name >= (char *) info->strs + strsize || file_name < (char *) str)
|
||||||
|
+ if (file_name >= (char *) info->strs + strsize
|
||||||
|
+ || file_name < (char *) str)
|
||||||
|
file_name = NULL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -1335,7 +1344,8 @@ _bfd_stab_section_find_nearest_line (bfd
|
||||||
|
if (val <= offset)
|
||||||
|
{
|
||||||
|
file_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
|
||||||
|
- if (file_name >= (char *) info->strs + strsize || file_name < (char *) str)
|
||||||
|
+ if (file_name >= (char *) info->strs + strsize
|
||||||
|
+ || file_name < (char *) str)
|
||||||
|
file_name = NULL;
|
||||||
|
*pline = 0;
|
||||||
|
}
|
||||||
52
binutils-CVE-2018-17360.patch
Normal file
52
binutils-CVE-2018-17360.patch
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
From cf93e9c2cf8f8b2566f8fc86e961592b51b5980d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alan Modra <amodra@gmail.com>
|
||||||
|
Date: Thu, 20 Sep 2018 18:23:17 +0930
|
||||||
|
Subject: [PATCH 1/1] PR23685, buffer overflow
|
||||||
|
|
||||||
|
PR 23685
|
||||||
|
* peXXigen.c (pe_print_edata): Correct export address table
|
||||||
|
overflow checks. Check dataoff against section size too.
|
||||||
|
---
|
||||||
|
|
||||||
|
diff -urNp a/bfd/ChangeLog b/bfd/ChangeLog
|
||||||
|
--- a/bfd/ChangeLog 2019-06-05 23:46:11.460000000 +0800
|
||||||
|
+++ b/bfd/ChangeLog 2019-06-05 23:59:36.030000000 +0800
|
||||||
|
@@ -1,4 +1,9 @@
|
||||||
|
2018-09-20 Alan Modra <amodra@gmail.com>
|
||||||
|
+ PR 23685
|
||||||
|
+ * peXXigen.c (pe_print_edata): Correct export address table
|
||||||
|
+ overflow checks. Check dataoff against section size too.
|
||||||
|
+
|
||||||
|
+2018-09-20 Alan Modra <amodra@gmail.com>
|
||||||
|
PR 23686
|
||||||
|
* dwarf2.c (read_section): Error when attempting to malloc
|
||||||
|
"(bfd_size_type) -1".
|
||||||
|
diff -urNp a/bfd/peXXigen.c b/bfd/peXXigen.c
|
||||||
|
--- a/bfd/peXXigen.c 2019-06-05 23:46:11.460000000 +0800
|
||||||
|
+++ b/bfd/peXXigen.c 2019-06-06 00:03:40.100000000 +0800
|
||||||
|
@@ -1661,7 +1661,8 @@ pe_print_edata (bfd * abfd, void * vfile
|
||||||
|
|
||||||
|
dataoff = addr - section->vma;
|
||||||
|
datasize = extra->DataDirectory[PE_EXPORT_TABLE].Size;
|
||||||
|
- if (datasize > section->size - dataoff)
|
||||||
|
+ if (dataoff > section->size
|
||||||
|
+ || datasize > section->size - dataoff)
|
||||||
|
{
|
||||||
|
fprintf (file,
|
||||||
|
_("\nThere is an export table in %s, but it does not fit into that section\n"),
|
||||||
|
@@ -1778,11 +1779,11 @@ pe_print_edata (bfd * abfd, void * vfile
|
||||||
|
edt.base);
|
||||||
|
|
||||||
|
/* PR 17512: Handle corrupt PE binaries. */
|
||||||
|
- if (edt.eat_addr + (edt.num_functions * 4) - adj >= datasize
|
||||||
|
+ /* PR 17512 file: 140-165018-0.004. */
|
||||||
|
+ if (edt.eat_addr - adj >= datasize
|
||||||
|
/* PR 17512: file: 092b1829 */
|
||||||
|
- || (edt.num_functions * 4) < edt.num_functions
|
||||||
|
- /* PR 17512 file: 140-165018-0.004. */
|
||||||
|
- || data + edt.eat_addr - adj < data)
|
||||||
|
+ || (edt.num_functions + 1) * 4 < edt.num_functions
|
||||||
|
+ || edt.eat_addr - adj + (edt.num_functions + 1) * 4 > datasize)
|
||||||
|
fprintf (file, _("\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n"),
|
||||||
|
(long) edt.eat_addr,
|
||||||
|
(long) edt.num_functions);
|
||||||
75
binutils-CVE-2018-20623.patch
Normal file
75
binutils-CVE-2018-20623.patch
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
From 28e817cc440bce73691c03e01860089a0954a837 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nick Clifton <nickc@redhat.com>
|
||||||
|
Date: Wed, 9 Jan 2019 12:25:16 +0000
|
||||||
|
Subject: [PATCH 1/1] Fix a heap use after free memory access fault when
|
||||||
|
displaying error messages about malformed archives.
|
||||||
|
|
||||||
|
PR 14049
|
||||||
|
* readelf.c (process_archive): Use arch.file_name in error
|
||||||
|
messages until the qualified name is available.
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
diff -urNp a/binutils/ChangeLog b/binutils/ChangeLog
|
||||||
|
--- a/binutils/ChangeLog 2019-06-06 00:06:39.330000000 +0800
|
||||||
|
+++ b/binutils/ChangeLog 2019-06-06 00:08:54.420000000 +0800
|
||||||
|
@@ -1,3 +1,8 @@
|
||||||
|
+2019-01-09 Nick Clifton <nickc@redhat.com>
|
||||||
|
+ PR 14049
|
||||||
|
+ * readelf.c (process_archive): Use arch.file_name in error
|
||||||
|
+ messages until the qualified name is available.
|
||||||
|
+
|
||||||
|
2018-07-18 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
2.31.1 Release point.
|
||||||
|
diff -urNp a/binutils/readelf.c b/binutils/readelf.c
|
||||||
|
--- a/binutils/readelf.c 2019-06-06 00:06:39.100000000 +0800
|
||||||
|
+++ b/binutils/readelf.c 2019-06-06 00:17:32.740000000 +0800
|
||||||
|
@@ -19088,7 +19088,7 @@ process_archive (Filedata * filedata, bf
|
||||||
|
/* Read the next archive header. */
|
||||||
|
if (fseek (filedata->handle, arch.next_arhdr_offset, SEEK_SET) != 0)
|
||||||
|
{
|
||||||
|
- error (_("%s: failed to seek to next archive header\n"), filedata->file_name);
|
||||||
|
+ error (_("%s: failed to seek to next archive header\n"), arch.file_name);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
got = fread (&arch.arhdr, 1, sizeof arch.arhdr, filedata->handle);
|
||||||
|
@@ -19096,7 +19096,10 @@ process_archive (Filedata * filedata, bf
|
||||||
|
{
|
||||||
|
if (got == 0)
|
||||||
|
break;
|
||||||
|
- error (_("%s: failed to read archive header\n"), filedata->file_name);
|
||||||
|
+ /* PR 24049 - we cannot use filedata->file_name as this will
|
||||||
|
+ have already been freed. */
|
||||||
|
+ error (_("%s: failed to read archive header\n"), arch.file_name);
|
||||||
|
+
|
||||||
|
ret = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
@@ -19116,7 +19119,7 @@ process_archive (Filedata * filedata, bf
|
||||||
|
name = get_archive_member_name (&arch, &nested_arch);
|
||||||
|
if (name == NULL)
|
||||||
|
{
|
||||||
|
- error (_("%s: bad archive file name\n"), filedata->file_name);
|
||||||
|
+ error (_("%s: bad archive file name\n"), arch.file_name);
|
||||||
|
ret = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
@@ -19125,7 +19128,7 @@ process_archive (Filedata * filedata, bf
|
||||||
|
qualified_name = make_qualified_name (&arch, &nested_arch, name);
|
||||||
|
if (qualified_name == NULL)
|
||||||
|
{
|
||||||
|
- error (_("%s: bad archive file name\n"), filedata->file_name);
|
||||||
|
+ error (_("%s: bad archive file name\n"), arch.file_name);
|
||||||
|
ret = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
@@ -19171,7 +19174,7 @@ process_archive (Filedata * filedata, bf
|
||||||
|
if (nested_arch.file == NULL)
|
||||||
|
{
|
||||||
|
error (_("%s: contains corrupt thin archive: %s\n"),
|
||||||
|
- filedata->file_name, name);
|
||||||
|
+ qualified_name, name);
|
||||||
|
ret = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
35
binutils-CVE-2018-20651.patch
Normal file
35
binutils-CVE-2018-20651.patch
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
From 54025d5812ff100f5f0654eb7e1ffd50f2e37f5f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alan Modra <amodra@gmail.com>
|
||||||
|
Date: Mon, 31 Dec 2018 15:40:08 +1030
|
||||||
|
Subject: [PATCH] PR24041, Invalid Memory Address Dereference in
|
||||||
|
elf_link_add_object_symbols
|
||||||
|
|
||||||
|
PR 24041
|
||||||
|
* elflink.c (elf_link_add_object_symbols): Don't segfault on
|
||||||
|
crafted ET_DYN with no program headers.
|
||||||
|
---
|
||||||
|
|
||||||
|
diff -urNp a/bfd/ChangeLog b/bfd/ChangeLog
|
||||||
|
--- a/bfd/ChangeLog 2019-06-06 00:21:45.780000000 +0800
|
||||||
|
+++ b/bfd/ChangeLog 2019-06-06 00:23:26.300000000 +0800
|
||||||
|
@@ -1,3 +1,8 @@
|
||||||
|
+2018-12-31 Alan Modra <amodra@gmail.com>
|
||||||
|
+ PR 24041
|
||||||
|
+ * elflink.c (elf_link_add_object_symbols): Don't segfault on
|
||||||
|
+ crafted ET_DYN with no program headers.
|
||||||
|
+
|
||||||
|
2018-09-20 Alan Modra <amodra@gmail.com>
|
||||||
|
PR 23685
|
||||||
|
* peXXigen.c (pe_print_edata): Correct export address table
|
||||||
|
diff -urNp a/bfd/elflink.c b/bfd/elflink.c
|
||||||
|
--- a/bfd/elflink.c 2019-06-06 00:21:45.770000000 +0800
|
||||||
|
+++ b/bfd/elflink.c 2019-06-06 00:24:50.330000000 +0800
|
||||||
|
@@ -4169,7 +4169,7 @@ error_free_dyn:
|
||||||
|
all sections contained fully therein. This makes relro
|
||||||
|
shared library sections appear as they will at run-time. */
|
||||||
|
phdr = elf_tdata (abfd)->phdr + elf_elfheader (abfd)->e_phnum;
|
||||||
|
- while (--phdr >= elf_tdata (abfd)->phdr)
|
||||||
|
+ while (phdr-- > elf_tdata (abfd)->phdr)
|
||||||
|
if (phdr->p_type == PT_GNU_RELRO)
|
||||||
|
{
|
||||||
|
for (s = abfd->sections; s != NULL; s = s->next)
|
||||||
15
binutils-CVE-2019-1010204.patch
Normal file
15
binutils-CVE-2019-1010204.patch
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
--- binutils.orig/gold/fileread.cc 2019-08-06 14:22:08.669313110 +0100
|
||||||
|
+++ binutils-2.32/gold/fileread.cc 2019-08-06 14:22:28.799177543 +0100
|
||||||
|
@@ -381,6 +381,12 @@ File_read::do_read(off_t start, section_
|
||||||
|
ssize_t bytes;
|
||||||
|
if (this->whole_file_view_ != NULL)
|
||||||
|
{
|
||||||
|
+ // See PR 23765 for an example of a testcase that triggers this error.
|
||||||
|
+ if (((ssize_t) start) < 0)
|
||||||
|
+ gold_fatal(_("%s: read failed, starting offset (%#llx) less than zero"),
|
||||||
|
+ this->filename().c_str(),
|
||||||
|
+ static_cast<long long>(start));
|
||||||
|
+
|
||||||
|
bytes = this->size_ - start;
|
||||||
|
if (static_cast<section_size_type>(bytes) >= size)
|
||||||
|
{
|
||||||
21
binutils-clear-version-info.patch
Normal file
21
binutils-clear-version-info.patch
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
--- binutils.orig/bfd/elflink.c 2018-08-14 10:25:09.108322746 +0100
|
||||||
|
+++ binutils-2.31.1/bfd/elflink.c 2018-08-14 10:28:45.617780256 +0100
|
||||||
|
@@ -686,13 +686,11 @@ bfd_elf_record_link_assignment (bfd *out
|
||||||
|
&& !h->def_regular)
|
||||||
|
h->root.type = bfd_link_hash_undefined;
|
||||||
|
|
||||||
|
- /* If this symbol is not being provided by the linker script, and it is
|
||||||
|
- currently defined by a dynamic object, but not by a regular object,
|
||||||
|
- then clear out any version information because the symbol will not be
|
||||||
|
- associated with the dynamic object any more. */
|
||||||
|
- if (!provide
|
||||||
|
- && h->def_dynamic
|
||||||
|
- && !h->def_regular)
|
||||||
|
+ /* If this symbol is currently defined by a dynamic object, but not
|
||||||
|
+ by a regular object, then clear out any version information because
|
||||||
|
+ the symbol will not be associated with the dynamic object any
|
||||||
|
+ more. */
|
||||||
|
+ if (h->def_dynamic && !h->def_regular)
|
||||||
|
h->verinfo.verdef = NULL;
|
||||||
|
|
||||||
|
/* Make sure this symbol is not garbage collected. */
|
||||||
196
binutils-delay-ld-script-constant-eval.patch
Normal file
196
binutils-delay-ld-script-constant-eval.patch
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
diff -rup binutils.orig/ld/emultempl/pe.em binutils-2.31.1/ld/emultempl/pe.em
|
||||||
|
--- binutils.orig/ld/emultempl/pe.em 2018-09-04 11:00:05.546667021 +0100
|
||||||
|
+++ binutils-2.31.1/ld/emultempl/pe.em 2018-09-04 11:00:58.427292612 +0100
|
||||||
|
@@ -2165,7 +2165,7 @@ gld_${EMULATION_NAME}_place_orphan (asec
|
||||||
|
&add_child);
|
||||||
|
if (bfd_link_relocatable (&link_info))
|
||||||
|
{
|
||||||
|
- os->section_alignment = s->alignment_power;
|
||||||
|
+ os->section_alignment = exp_intop (1U << s->alignment_power);
|
||||||
|
os->bfd_section->alignment_power = s->alignment_power;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff -rup binutils.orig/ld/emultempl/pep.em binutils-2.31.1/ld/emultempl/pep.em
|
||||||
|
--- binutils.orig/ld/emultempl/pep.em 2018-09-04 11:00:05.545667029 +0100
|
||||||
|
+++ binutils-2.31.1/ld/emultempl/pep.em 2018-09-04 11:01:29.340073740 +0100
|
||||||
|
@@ -1962,7 +1962,7 @@ gld_${EMULATION_NAME}_place_orphan (asec
|
||||||
|
&add_child);
|
||||||
|
if (bfd_link_relocatable (&link_info))
|
||||||
|
{
|
||||||
|
- os->section_alignment = s->alignment_power;
|
||||||
|
+ os->section_alignment = exp_intop (1U << s->alignment_power);
|
||||||
|
os->bfd_section->alignment_power = s->alignment_power;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff -rup binutils.orig/ld/ldexp.c binutils-2.31.1/ld/ldexp.c
|
||||||
|
--- binutils.orig/ld/ldexp.c 2018-09-04 11:00:05.535667100 +0100
|
||||||
|
+++ binutils-2.31.1/ld/ldexp.c 2018-09-04 11:03:29.179225246 +0100
|
||||||
|
@@ -1528,6 +1528,28 @@ exp_get_value_int (etree_type *tree, int
|
||||||
|
return exp_get_vma (tree, def, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Return the smallest non-negative integer such that two raised to
|
||||||
|
+ that power is at least as large as the vma evaluated at TREE, if
|
||||||
|
+ TREE is a non-NULL expression that can be resolved. If TREE is
|
||||||
|
+ NULL or cannot be resolved, return -1. */
|
||||||
|
+
|
||||||
|
+signed int
|
||||||
|
+exp_get_power (etree_type *tree, char *name)
|
||||||
|
+{
|
||||||
|
+ bfd_vma x = exp_get_vma (tree, -1, name);
|
||||||
|
+ bfd_vma p2;
|
||||||
|
+ int n;
|
||||||
|
+
|
||||||
|
+ if (x == (bfd_vma) -1)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
+ for (n = 0, p2 = 1; p2 < x; ++n, p2 <<= 1)
|
||||||
|
+ if (p2 == 0)
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ return n;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
fill_type *
|
||||||
|
exp_get_fill (etree_type *tree, fill_type *def, char *name)
|
||||||
|
{
|
||||||
|
diff -rup binutils.orig/ld/ldexp.h binutils-2.31.1/ld/ldexp.h
|
||||||
|
--- binutils.orig/ld/ldexp.h 2018-09-04 11:00:05.536667092 +0100
|
||||||
|
+++ binutils-2.31.1/ld/ldexp.h 2018-09-04 11:04:12.937915422 +0100
|
||||||
|
@@ -231,6 +231,8 @@ bfd_vma exp_get_vma
|
||||||
|
(etree_type *, bfd_vma, char *);
|
||||||
|
int exp_get_value_int
|
||||||
|
(etree_type *, int, char *);
|
||||||
|
+signed int exp_get_power
|
||||||
|
+ (etree_type *, char *);
|
||||||
|
fill_type *exp_get_fill
|
||||||
|
(etree_type *, fill_type *, char *);
|
||||||
|
bfd_vma exp_get_abs_int
|
||||||
|
diff -rup binutils.orig/ld/ldlang.c binutils-2.31.1/ld/ldlang.c
|
||||||
|
--- binutils.orig/ld/ldlang.c 2018-09-04 11:00:05.536667092 +0100
|
||||||
|
+++ binutils-2.31.1/ld/ldlang.c 2018-09-04 11:07:42.249433438 +0100
|
||||||
|
@@ -1199,8 +1199,8 @@ output_section_statement_newfunc (struct
|
||||||
|
ret = (struct out_section_hash_entry *) entry;
|
||||||
|
memset (&ret->s, 0, sizeof (ret->s));
|
||||||
|
ret->s.header.type = lang_output_section_statement_enum;
|
||||||
|
- ret->s.output_section_statement.subsection_alignment = -1;
|
||||||
|
- ret->s.output_section_statement.section_alignment = -1;
|
||||||
|
+ ret->s.output_section_statement.subsection_alignment = NULL;
|
||||||
|
+ ret->s.output_section_statement.section_alignment = NULL;
|
||||||
|
ret->s.output_section_statement.block_value = 1;
|
||||||
|
lang_list_init (&ret->s.output_section_statement.children);
|
||||||
|
lang_statement_append (stat_ptr, &ret->s, &ret->s.header.next);
|
||||||
|
@@ -2193,8 +2193,9 @@ init_os (lang_output_section_statement_t
|
||||||
|
exp_init_os (s->load_base);
|
||||||
|
|
||||||
|
/* If supplied an alignment, set it. */
|
||||||
|
- if (s->section_alignment != -1)
|
||||||
|
- s->bfd_section->alignment_power = s->section_alignment;
|
||||||
|
+ if (s->section_alignment != NULL)
|
||||||
|
+ s->bfd_section->alignment_power = exp_get_power (s->section_alignment,
|
||||||
|
+ "section alignment");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make sure that all output sections mentioned in an expression are
|
||||||
|
@@ -4706,8 +4707,10 @@ size_input_section
|
||||||
|
is greater than any seen before, then record it too. Perform
|
||||||
|
the alignment by inserting a magic 'padding' statement. */
|
||||||
|
|
||||||
|
- if (output_section_statement->subsection_alignment != -1)
|
||||||
|
- i->alignment_power = output_section_statement->subsection_alignment;
|
||||||
|
+ if (output_section_statement->subsection_alignment != NULL)
|
||||||
|
+ i->alignment_power
|
||||||
|
+ = exp_get_power (output_section_statement->subsection_alignment,
|
||||||
|
+ "subsection alignment");
|
||||||
|
|
||||||
|
if (o->alignment_power < i->alignment_power)
|
||||||
|
o->alignment_power = i->alignment_power;
|
||||||
|
@@ -5147,7 +5150,8 @@ lang_size_sections_1
|
||||||
|
section_alignment = os->bfd_section->alignment_power;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
- section_alignment = os->section_alignment;
|
||||||
|
+ section_alignment = exp_get_power (os->section_alignment,
|
||||||
|
+ "section alignment");
|
||||||
|
|
||||||
|
/* Align to what the section needs. */
|
||||||
|
if (section_alignment > 0)
|
||||||
|
@@ -5225,7 +5229,8 @@ lang_size_sections_1
|
||||||
|
only align according to the value in the output
|
||||||
|
statement. */
|
||||||
|
if (os->lma_region != os->region)
|
||||||
|
- section_alignment = os->section_alignment;
|
||||||
|
+ section_alignment = exp_get_power (os->section_alignment,
|
||||||
|
+ "section alignment");
|
||||||
|
if (section_alignment > 0)
|
||||||
|
lma = align_power (lma, section_alignment);
|
||||||
|
}
|
||||||
|
@@ -6673,25 +6678,6 @@ lang_add_output (const char *name, int f
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int
|
||||||
|
-topower (int x)
|
||||||
|
-{
|
||||||
|
- unsigned int i = 1;
|
||||||
|
- int l;
|
||||||
|
-
|
||||||
|
- if (x < 0)
|
||||||
|
- return -1;
|
||||||
|
-
|
||||||
|
- for (l = 0; l < 32; l++)
|
||||||
|
- {
|
||||||
|
- if (i >= (unsigned int) x)
|
||||||
|
- return l;
|
||||||
|
- i <<= 1;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- return 0;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
lang_output_section_statement_type *
|
||||||
|
lang_enter_output_section_statement (const char *output_section_statement_name,
|
||||||
|
etree_type *address_exp,
|
||||||
|
@@ -6727,10 +6713,8 @@ lang_enter_output_section_statement (con
|
||||||
|
einfo (_("%F%P:%pS: error: align with input and explicit align specified\n"),
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
- os->subsection_alignment =
|
||||||
|
- topower (exp_get_value_int (subalign, -1, "subsection alignment"));
|
||||||
|
- os->section_alignment =
|
||||||
|
- topower (exp_get_value_int (align, -1, "section alignment"));
|
||||||
|
+ os->subsection_alignment = subalign;
|
||||||
|
+ os->section_alignment = align;
|
||||||
|
|
||||||
|
os->load_base = ebase;
|
||||||
|
return os;
|
||||||
|
@@ -7748,7 +7732,7 @@ lang_new_phdr (const char *name,
|
||||||
|
n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
|
||||||
|
n->next = NULL;
|
||||||
|
n->name = name;
|
||||||
|
- n->type = exp_get_value_int (type, 0, "program header type");
|
||||||
|
+ n->type = exp_get_vma (type, 0, "program header type");
|
||||||
|
n->filehdr = filehdr;
|
||||||
|
n->phdrs = phdrs;
|
||||||
|
n->at = at;
|
||||||
|
diff -rup binutils.orig/ld/ldlang.h binutils-2.31.1/ld/ldlang.h
|
||||||
|
--- binutils.orig/ld/ldlang.h 2018-09-04 11:00:05.533667114 +0100
|
||||||
|
+++ binutils-2.31.1/ld/ldlang.h 2018-09-04 11:08:29.224100845 +0100
|
||||||
|
@@ -143,6 +143,8 @@ typedef struct lang_output_section_state
|
||||||
|
fill_type *fill;
|
||||||
|
union etree_union *addr_tree;
|
||||||
|
union etree_union *load_base;
|
||||||
|
+ union etree_union *section_alignment;
|
||||||
|
+ union etree_union *subsection_alignment;
|
||||||
|
|
||||||
|
/* If non-null, an expression to evaluate after setting the section's
|
||||||
|
size. The expression is evaluated inside REGION (above) with '.'
|
||||||
|
@@ -153,8 +155,6 @@ typedef struct lang_output_section_state
|
||||||
|
lang_output_section_phdr_list *phdrs;
|
||||||
|
|
||||||
|
unsigned int block_value;
|
||||||
|
- int subsection_alignment; /* Alignment of components. */
|
||||||
|
- int section_alignment; /* Alignment of start of section. */
|
||||||
|
int constraint;
|
||||||
|
flagword flags;
|
||||||
|
enum section_type sectype;
|
||||||
52
binutils-detect-corrupt-sym-version-info.patch
Normal file
52
binutils-detect-corrupt-sym-version-info.patch
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
diff -rup binutils,orig/bfd/elf.c binutils-2.31.1/bfd/elf.c
|
||||||
|
--- binutils,orig/bfd/elf.c 2018-08-28 12:38:29.987511521 +0100
|
||||||
|
+++ binutils-2.31.1/bfd/elf.c 2018-08-28 12:39:35.010036349 +0100
|
||||||
|
@@ -1877,7 +1877,7 @@ _bfd_elf_get_symbol_version_string (bfd
|
||||||
|
{
|
||||||
|
Elf_Internal_Verneed *t;
|
||||||
|
|
||||||
|
- version_string = "";
|
||||||
|
+ version_string = _("<corrupt>");
|
||||||
|
for (t = elf_tdata (abfd)->verref;
|
||||||
|
t != NULL;
|
||||||
|
t = t->vn_nextref)
|
||||||
|
diff -rup binutils,orig/binutils/readelf.c binutils-2.31.1/binutils/readelf.c
|
||||||
|
--- binutils,orig/binutils/readelf.c 2018-08-28 12:38:30.552507392 +0100
|
||||||
|
+++ binutils-2.31.1/binutils/readelf.c 2018-08-28 12:42:04.625942967 +0100
|
||||||
|
@@ -11263,6 +11263,7 @@ get_symbol_version_string (Filedata *
|
||||||
|
unsigned char data[2];
|
||||||
|
unsigned short vers_data;
|
||||||
|
unsigned long offset;
|
||||||
|
+ unsigned short max_vd_ndx;
|
||||||
|
|
||||||
|
if (!is_dynsym
|
||||||
|
|| version_info[DT_VERSIONTAGIDX (DT_VERSYM)] == 0)
|
||||||
|
@@ -11280,6 +11281,8 @@ get_symbol_version_string (Filedata *
|
||||||
|
if ((vers_data & VERSYM_HIDDEN) == 0 && vers_data == 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
+ max_vd_ndx = 0;
|
||||||
|
+
|
||||||
|
/* Usually we'd only see verdef for defined symbols, and verneed for
|
||||||
|
undefined symbols. However, symbols defined by the linker in
|
||||||
|
.dynbss for variables copied from a shared library in order to
|
||||||
|
@@ -11322,6 +11325,9 @@ get_symbol_version_string (Filedata *
|
||||||
|
ivd.vd_flags = BYTE_GET (evd.vd_flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if ((ivd.vd_ndx & VERSYM_VERSION) > max_vd_ndx)
|
||||||
|
+ max_vd_ndx = ivd.vd_ndx & VERSYM_VERSION;
|
||||||
|
+
|
||||||
|
off += ivd.vd_next;
|
||||||
|
}
|
||||||
|
while (ivd.vd_ndx != (vers_data & VERSYM_VERSION) && ivd.vd_next != 0);
|
||||||
|
@@ -11413,6 +11419,9 @@ get_symbol_version_string (Filedata *
|
||||||
|
return (ivna.vna_name < strtab_size
|
||||||
|
? strtab + ivna.vna_name : _("<corrupt>"));
|
||||||
|
}
|
||||||
|
+ else if ((max_vd_ndx || (vers_data & VERSYM_VERSION) != 1)
|
||||||
|
+ && (vers_data & VERSYM_VERSION) > max_vd_ndx)
|
||||||
|
+ return _("<corrupt>");
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
657
binutils-fix-testsuite-failures.patch
Normal file
657
binutils-fix-testsuite-failures.patch
Normal file
@ -0,0 +1,657 @@
|
|||||||
|
diff -rup binutils.orig/gold/testsuite/Makefile.am binutils-2.30/gold/testsuite/Makefile.am
|
||||||
|
--- binutils.orig/gold/testsuite/Makefile.am 2018-05-31 16:14:12.736538727 +0100
|
||||||
|
+++ binutils-2.30/gold/testsuite/Makefile.am 2018-06-01 10:15:00.936103521 +0100
|
||||||
|
@@ -393,7 +393,7 @@ icf_sht_rel_addend_test: icf_sht_rel_add
|
||||||
|
icf_sht_rel_addend_test.stdout: icf_sht_rel_addend_test
|
||||||
|
$(TEST_NM) icf_sht_rel_addend_test > icf_sht_rel_addend_test.stdout
|
||||||
|
|
||||||
|
-check_PROGRAMS += large_symbol_alignment
|
||||||
|
+# check_PROGRAMS += large_symbol_alignment
|
||||||
|
large_symbol_alignment_SOURCES = large_symbol_alignment.cc
|
||||||
|
large_symbol_alignment_DEPENDENCIES = gcctestdir/ld
|
||||||
|
large_symbol_alignment_LDFLAGS = -Bgcctestdir/
|
||||||
|
@@ -783,7 +783,7 @@ weak_test_DEPENDENCIES = gcctestdir/ld
|
||||||
|
weak_test_LDFLAGS = -Bgcctestdir/
|
||||||
|
weak_test_LDADD =
|
||||||
|
|
||||||
|
-check_PROGRAMS += weak_undef_test
|
||||||
|
+# check_PROGRAMS += weak_undef_test
|
||||||
|
MOSTLYCLEANFILES += alt/weak_undef_lib.so
|
||||||
|
weak_undef_test_SOURCES = weak_undef_test.cc
|
||||||
|
weak_undef_test_DEPENDENCIES = gcctestdir/ld weak_undef_lib.so alt/weak_undef_lib.so
|
||||||
|
@@ -1409,7 +1409,7 @@ initpri2_DEPENDENCIES = gcctestdir/ld
|
||||||
|
initpri2_LDFLAGS = -Bgcctestdir/ -Wl,--ctors-in-init-array
|
||||||
|
initpri2_LDADD =
|
||||||
|
|
||||||
|
-check_PROGRAMS += initpri3a
|
||||||
|
+# check_PROGRAMS += initpri3a
|
||||||
|
initpri3a_SOURCES = initpri3.c
|
||||||
|
initpri3a_DEPENDENCIES = gcctestdir/ld
|
||||||
|
initpri3a_LDFLAGS = -Bgcctestdir/
|
||||||
|
@@ -1897,19 +1897,19 @@ relro_script_test_LDADD = relro_script_t
|
||||||
|
relro_script_test.so: gcctestdir/ld relro_script_test.t relro_test_pic.o
|
||||||
|
$(CXXLINK) -Bgcctestdir/ -shared -Wl,-z,relro -Wl,-T,$(srcdir)/relro_script_test.t relro_test_pic.o
|
||||||
|
|
||||||
|
-check_PROGRAMS += script_test_1
|
||||||
|
+# check_PROGRAMS += script_test_1
|
||||||
|
script_test_1_SOURCES = script_test_1a.cc script_test_1b.cc
|
||||||
|
script_test_1_DEPENDENCIES = gcctestdir/ld script_test_1.t
|
||||||
|
script_test_1_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -Wl,-T,$(srcdir)/script_test_1.t
|
||||||
|
script_test_1_LDADD =
|
||||||
|
|
||||||
|
-check_PROGRAMS += script_test_2
|
||||||
|
+# check_PROGRAMS += script_test_2
|
||||||
|
script_test_2_SOURCES = script_test_2.cc script_test_2a.cc script_test_2b.cc
|
||||||
|
script_test_2_DEPENDENCIES = gcctestdir/ld script_test_2.t
|
||||||
|
script_test_2_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -Wl,-T,$(srcdir)/script_test_2.t
|
||||||
|
script_test_2_LDADD =
|
||||||
|
|
||||||
|
-check_PROGRAMS += justsyms
|
||||||
|
+# check_PROGRAMS += justsyms
|
||||||
|
justsyms_SOURCES = justsyms_1.cc
|
||||||
|
justsyms_DEPENDENCIES = gcctestdir/ld justsyms_2r.o
|
||||||
|
justsyms_LDFLAGS = -Bgcctestdir/ -Wl,-R,justsyms_2r.o
|
||||||
|
@@ -1919,7 +1919,7 @@ justsyms_2.o: justsyms_2.cc
|
||||||
|
justsyms_2r.o: justsyms_2.o gcctestdir/ld $(srcdir)/justsyms.t
|
||||||
|
gcctestdir/ld -o $@ -r -T $(srcdir)/justsyms.t justsyms_2.o
|
||||||
|
|
||||||
|
-check_PROGRAMS += justsyms_exec
|
||||||
|
+# check_PROGRAMS += justsyms_exec
|
||||||
|
justsyms_exec_SOURCES = justsyms_exec.c
|
||||||
|
justsyms_exec_DEPENDENCIES = gcctestdir/ld justsyms_lib
|
||||||
|
justsyms_exec_LDFLAGS = -Bgcctestdir/ -Wl,-R,justsyms_lib
|
||||||
|
@@ -1930,7 +1930,7 @@ justsyms_lib.o: justsyms_lib.c
|
||||||
|
justsyms_lib: justsyms_lib.o gcctestdir/ld
|
||||||
|
gcctestdir/ld -o $@ -Ttext=0x1000200 -Tdata=0x2000000 -e exported_func justsyms_lib.o
|
||||||
|
|
||||||
|
-check_PROGRAMS += binary_test
|
||||||
|
+# check_PROGRAMS += binary_test
|
||||||
|
MOSTLYCLEANFILES += binary.txt
|
||||||
|
binary_test_SOURCES = binary_test.cc
|
||||||
|
binary_test_DEPENDENCIES = gcctestdir/ld binary.txt
|
||||||
|
@@ -1952,7 +1952,7 @@ ver_matching_def_pic.o: ver_matching_def
|
||||||
|
ver_matching_test.stdout: ver_matching_def.so
|
||||||
|
$(TEST_OBJDUMP) -T ver_matching_def.so | $(TEST_CXXFILT) > ver_matching_test.stdout
|
||||||
|
|
||||||
|
-check_PROGRAMS += script_test_3
|
||||||
|
+# check_PROGRAMS += script_test_3
|
||||||
|
check_SCRIPTS += script_test_3.sh
|
||||||
|
check_DATA += script_test_3.stdout
|
||||||
|
MOSTLYCLEANFILES += script_test_3.stdout
|
||||||
|
@@ -1961,7 +1961,7 @@ script_test_3: basic_test.o gcctestdir/l
|
||||||
|
script_test_3.stdout: script_test_3
|
||||||
|
$(TEST_READELF) -SlW script_test_3 > script_test_3.stdout
|
||||||
|
|
||||||
|
-check_PROGRAMS += tls_phdrs_script_test
|
||||||
|
+# check_PROGRAMS += tls_phdrs_script_test
|
||||||
|
tls_phdrs_script_test_SOURCES = $(tls_test_SOURCES)
|
||||||
|
tls_phdrs_script_test_DEPENDENCIES = $(tls_test_DEPENDENCIES) $(srcdir)/script_test_3.t
|
||||||
|
tls_phdrs_script_test_LDFLAGS = $(tls_test_LDFLAGS) -Wl,-T,$(srcdir)/script_test_3.t
|
||||||
|
@@ -2043,7 +2043,7 @@ check_PROGRAMS += script_test_12
|
||||||
|
script_test_12: gcctestdir/ld $(srcdir)/script_test_12.t script_test_12a.o script_test_12b.o
|
||||||
|
$(LINK) -Bgcctestdir/ -Wl,-T,$(srcdir)/script_test_12.t script_test_12a.o script_test_12b.o
|
||||||
|
|
||||||
|
-check_PROGRAMS += script_test_12i
|
||||||
|
+# check_PROGRAMS += script_test_12i
|
||||||
|
script_test_12i: gcctestdir/ld $(srcdir)/script_test_12i.t script_test_12a.o script_test_12b.o
|
||||||
|
$(LINK) -Bgcctestdir/ -Wl,-T,$(srcdir)/script_test_12i.t script_test_12a.o script_test_12b.o
|
||||||
|
script_test_12a.o: script_test_12a.c
|
||||||
|
@@ -3023,7 +3023,7 @@ two_file_test_2_ndebug.o: two_file_test_
|
||||||
|
two_file_test_main_ndebug.o: two_file_test_main.cc
|
||||||
|
$(CXXCOMPILE) -O0 -g0 -c -o $@ $<
|
||||||
|
|
||||||
|
-check_PROGRAMS += incremental_test_2
|
||||||
|
+# check_PROGRAMS += incremental_test_2
|
||||||
|
MOSTLYCLEANFILES += two_file_test_tmp_2.o
|
||||||
|
incremental_test_2: two_file_test_1_v1_ndebug.o two_file_test_1_ndebug.o two_file_test_1b_ndebug.o \
|
||||||
|
two_file_test_2_ndebug.o two_file_test_main_ndebug.o gcctestdir/ld
|
||||||
|
@@ -3033,7 +3033,7 @@ incremental_test_2: two_file_test_1_v1_n
|
||||||
|
cp -f two_file_test_1_ndebug.o two_file_test_tmp_2.o
|
||||||
|
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro,-no-pie -Bgcctestdir/ two_file_test_tmp_2.o two_file_test_1b_ndebug.o two_file_test_2_ndebug.o two_file_test_main_ndebug.o
|
||||||
|
|
||||||
|
-check_PROGRAMS += incremental_test_3
|
||||||
|
+# check_PROGRAMS += incremental_test_3
|
||||||
|
MOSTLYCLEANFILES += two_file_test_tmp_3.o
|
||||||
|
incremental_test_3: two_file_test_1.o two_file_test_1b_v1.o two_file_test_1b.o \
|
||||||
|
two_file_test_2.o two_file_test_main.o gcctestdir/ld
|
||||||
|
@@ -3043,7 +3043,7 @@ incremental_test_3: two_file_test_1.o tw
|
||||||
|
cp -f two_file_test_1b.o two_file_test_tmp_3.o
|
||||||
|
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro,-no-pie -Bgcctestdir/ two_file_test_1.o two_file_test_tmp_3.o two_file_test_2.o two_file_test_main.o
|
||||||
|
|
||||||
|
-check_PROGRAMS += incremental_test_4
|
||||||
|
+# check_PROGRAMS += incremental_test_4
|
||||||
|
MOSTLYCLEANFILES += incremental_test_4.base two_file_test_tmp_4.o
|
||||||
|
incremental_test_4: two_file_test_1.o two_file_test_1b.o two_file_test_2_v1.o \
|
||||||
|
two_file_test_2.o two_file_test_main.o gcctestdir/ld
|
||||||
|
@@ -3054,7 +3054,7 @@ incremental_test_4: two_file_test_1.o tw
|
||||||
|
cp -f two_file_test_2.o two_file_test_tmp_4.o
|
||||||
|
$(CXXLINK) -Wl,--incremental-update,--incremental-base=incremental_test_4.base -Wl,-z,norelro,-no-pie -Bgcctestdir/ two_file_test_1.o two_file_test_1b.o two_file_test_tmp_4.o two_file_test_main.o
|
||||||
|
|
||||||
|
-check_PROGRAMS += incremental_test_5
|
||||||
|
+# check_PROGRAMS += incremental_test_5
|
||||||
|
MOSTLYCLEANFILES += two_file_test_5.a
|
||||||
|
incremental_test_5: two_file_test_1.o two_file_test_1b_v1.o two_file_test_1b.o \
|
||||||
|
two_file_test_2.o two_file_test_main.o gcctestdir/ld
|
||||||
|
@@ -3068,7 +3068,7 @@ incremental_test_5: two_file_test_1.o tw
|
||||||
|
|
||||||
|
# Test the --incremental-unchanged flag with an archive library.
|
||||||
|
# The second link should not update the library.
|
||||||
|
-check_PROGRAMS += incremental_test_6
|
||||||
|
+# check_PROGRAMS += incremental_test_6
|
||||||
|
MOSTLYCLEANFILES += two_file_test_6.a
|
||||||
|
incremental_test_6: two_file_test_1.o two_file_test_1b_v1.o two_file_test_1b.o \
|
||||||
|
two_file_test_2.o two_file_test_main.o gcctestdir/ld
|
||||||
|
@@ -3080,7 +3080,7 @@ incremental_test_6: two_file_test_1.o tw
|
||||||
|
$(TEST_AR) rc two_file_test_6.a two_file_test_1.o two_file_test_tmp_6.o two_file_test_2.o
|
||||||
|
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro,-no-pie -Bgcctestdir/ two_file_test_main.o -Wl,--incremental-unchanged two_file_test_6.a -Wl,--incremental-unknown
|
||||||
|
|
||||||
|
-check_PROGRAMS += incremental_copy_test
|
||||||
|
+# check_PROGRAMS += incremental_copy_test
|
||||||
|
incremental_copy_test: copy_test_v1.o copy_test.o copy_test_1.so copy_test_2.so
|
||||||
|
cp -f copy_test_v1.o copy_test_tmp.o
|
||||||
|
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro,-no-pie -Bgcctestdir/ -Wl,-R,. -Wl,--no-as-needed copy_test_tmp.o copy_test_1.so copy_test_2.so
|
||||||
|
@@ -3088,7 +3088,7 @@ incremental_copy_test: copy_test_v1.o co
|
||||||
|
cp -f copy_test.o copy_test_tmp.o
|
||||||
|
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro,-no-pie -Bgcctestdir/ -Wl,-R,. -Wl,--no-as-needed copy_test_tmp.o copy_test_1.so copy_test_2.so
|
||||||
|
|
||||||
|
-check_PROGRAMS += incremental_common_test_1
|
||||||
|
+# check_PROGRAMS += incremental_common_test_1
|
||||||
|
incremental_common_test_1: common_test_1_v1.o common_test_1_v2.o gcctestdir/ld
|
||||||
|
cp -f common_test_1_v1.o common_test_1_tmp.o
|
||||||
|
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro,-no-pie -Bgcctestdir/ common_test_1_tmp.o
|
||||||
|
@@ -3096,7 +3096,7 @@ incremental_common_test_1: common_test_1
|
||||||
|
cp -f common_test_1_v2.o common_test_1_tmp.o
|
||||||
|
$(CXXLINK) -Wl,--incremental-update -Wl,-z,norelro,-no-pie -Bgcctestdir/ common_test_1_tmp.o
|
||||||
|
|
||||||
|
-check_PROGRAMS += incremental_comdat_test_1
|
||||||
|
+# check_PROGRAMS += incremental_comdat_test_1
|
||||||
|
incremental_comdat_test_1: incr_comdat_test_1.o incr_comdat_test_2_v1.o incr_comdat_test_2_v2.o incr_comdat_test_2_v3.o gcctestdir/ld
|
||||||
|
cp -f incr_comdat_test_2_v1.o incr_comdat_test_1_tmp.o
|
||||||
|
$(CXXLINK) -Wl,--incremental-full,--incremental-patch=100 -Wl,-z,norelro,-no-pie -Bgcctestdir/ incr_comdat_test_1.o incr_comdat_test_1_tmp.o
|
||||||
|
diff -rup binutils.orig/gold/testsuite/Makefile.in binutils-2.30/gold/testsuite/Makefile.in
|
||||||
|
--- binutils.orig/gold/testsuite/Makefile.in 2018-05-31 16:14:12.729538804 +0100
|
||||||
|
+++ binutils-2.30/gold/testsuite/Makefile.in 2018-06-01 10:15:13.070965094 +0100
|
||||||
|
@@ -166,7 +166,6 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ alt/weak_undef_lib.so \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ libweak_undef_2.a
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_5 = icf_virtual_function_folding_test \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ large_symbol_alignment \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ basic_test basic_pic_test \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ eh_test
|
||||||
|
@GCC_FALSE@large_symbol_alignment_DEPENDENCIES =
|
||||||
|
@@ -220,7 +219,6 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||||
|
@NATIVE_LINKER_FALSE@exception_test_DEPENDENCIES =
|
||||||
|
@GCC_TRUE@@HAVE_STATIC_TRUE@@NATIVE_LINKER_TRUE@am__append_14 = exception_static_test
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_15 = weak_test \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ weak_undef_test \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ weak_undef_test_2
|
||||||
|
@GCC_FALSE@weak_test_DEPENDENCIES =
|
||||||
|
@NATIVE_LINKER_FALSE@weak_test_DEPENDENCIES =
|
||||||
|
@@ -334,7 +332,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||||
|
# Test difference between "*(a b)" and "*(a) *(b)" in input section spec.
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_39 = many_sections_test \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ many_sections_r_test initpri1 \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri2 initpri3a \
|
||||||
|
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri2 \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ flagstest_o_specialfile \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ flagstest_compress_debug_sections_none \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ flagstest_compress_debug_sections \
|
||||||
|
@@ -348,13 +346,9 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ ver_test_12 protected_1 \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ protected_2 relro_test \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ relro_now_test relro_strip_test \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ relro_script_test script_test_1 \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_2 justsyms \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ justsyms_exec binary_test \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_3 \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ tls_phdrs_script_test \
|
||||||
|
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ relro_script_test \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ tls_script_test script_test_11 \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_12 script_test_12i \
|
||||||
|
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_12 \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ dynamic_list_2 \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ thin_archive_test_1 \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ thin_archive_test_2
|
||||||
|
@@ -813,15 +807,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__E
|
||||||
|
|
||||||
|
# Test the --incremental-unchanged flag with an archive library.
|
||||||
|
# The second link should not update the library.
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_82 = incremental_test_2 \
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_3 \
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4 \
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_5 \
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_6 \
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_copy_test \
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_common_test_1 \
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_comdat_test_1 \
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_x86_64_bnd_test
|
||||||
|
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_82 =
|
||||||
|
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_83 = two_file_test_tmp_2.o \
|
||||||
|
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ two_file_test_tmp_3.o \
|
||||||
|
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4.base \
|
||||||
|
@@ -1082,7 +1068,6 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest
|
||||||
|
@NATIVE_OR_CROSS_LINKER_TRUE@ leb128_unittest$(EXEEXT) \
|
||||||
|
@NATIVE_OR_CROSS_LINKER_TRUE@ overflow_unittest$(EXEEXT)
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_2 = icf_virtual_function_folding_test$(EXEEXT) \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ large_symbol_alignment$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ basic_test$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ basic_pic_test$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ eh_test$(EXEEXT)
|
||||||
|
@@ -1127,7 +1112,6 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_separate_shared_21_test$(EXEEXT)
|
||||||
|
@GCC_TRUE@@HAVE_STATIC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_11 = exception_static_test$(EXEEXT)
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_12 = weak_test$(EXEEXT) \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ weak_undef_test$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ weak_undef_test_2$(EXEEXT)
|
||||||
|
@FN_PTRS_IN_SO_WITHOUT_PIC_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_13 = weak_undef_nonpic_test$(EXEEXT)
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_14 = \
|
||||||
|
@@ -1164,7 +1148,6 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ many_sections_r_test$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri1$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri2$(EXEEXT) \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ initpri3a$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ flagstest_o_specialfile$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ flagstest_compress_debug_sections_none$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ flagstest_compress_debug_sections$(EXEEXT) \
|
||||||
|
@@ -1186,17 +1169,9 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ relro_now_test$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ relro_strip_test$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ relro_script_test$(EXEEXT) \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_1$(EXEEXT) \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_2$(EXEEXT) \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ justsyms$(EXEEXT) \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ justsyms_exec$(EXEEXT) \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ binary_test$(EXEEXT) \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_3$(EXEEXT) \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ tls_phdrs_script_test$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ tls_script_test$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_11$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_12$(EXEEXT) \
|
||||||
|
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_12i$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ dynamic_list_2$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ thin_archive_test_1$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ thin_archive_test_2$(EXEEXT)
|
||||||
|
@@ -1263,14 +1238,7 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ ehdr_start_test_3$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ ehdr_start_test_5$(EXEEXT) \
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@ pr20976$(EXEEXT)
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_40 = incremental_test_2$(EXEEXT) \
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_3$(EXEEXT) \
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_4$(EXEEXT) \
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_5$(EXEEXT) \
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_test_6$(EXEEXT) \
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_copy_test$(EXEEXT) \
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_common_test_1$(EXEEXT) \
|
||||||
|
-@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ incremental_comdat_test_1$(EXEEXT) \
|
||||||
|
+@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_40 = \
|
||||||
|
@DEFAULT_TARGET_X86_64_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ exception_x86_64_bnd_test$(EXEEXT)
|
||||||
|
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_41 = pr22266$(EXEEXT)
|
||||||
|
basic_pic_test_SOURCES = basic_pic_test.c
|
||||||
|
--- binutils.orig/ld/testsuite/ld-elf/pr22269-1.c 2018-05-31 16:14:12.648539694 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-elf/pr22269-1.c 2018-06-01 10:55:24.284977908 +0100
|
||||||
|
@@ -5,4 +5,5 @@ _start (void)
|
||||||
|
{
|
||||||
|
if (&foo)
|
||||||
|
return foo;
|
||||||
|
+ return 0;
|
||||||
|
}
|
||||||
|
--- binutils.orig/ld/testsuite/ld-scripts/cross3.t 2018-05-31 16:14:12.679539354 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-scripts/cross3.t 2018-06-01 10:59:46.109996654 +0100
|
||||||
|
@@ -6,5 +6,6 @@ SECTIONS
|
||||||
|
.nocrossrefs : { *(.nocrossrefs) }
|
||||||
|
.data : { *(.data) *(.data.*) *(.sdata) *(.opd) *(.toc) }
|
||||||
|
.bss : { *(.bss) *(COMMON) }
|
||||||
|
+ .got.plt : { *(.got) *(.plt) *(.got.plt) }
|
||||||
|
/DISCARD/ : { *(*) }
|
||||||
|
}
|
||||||
|
--- binutils.orig/ld/testsuite/ld-srec/srec.exp 2018-05-31 16:14:12.570540551 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-srec/srec.exp 2018-06-01 11:01:15.443979458 +0100
|
||||||
|
@@ -19,6 +19,14 @@
|
||||||
|
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||||
|
# MA 02110-1301, USA.
|
||||||
|
|
||||||
|
+if [istarget x86_64-*-*] {
|
||||||
|
+ # The S-record tests are failing for some configurations
|
||||||
|
+ # of x86_64-linux builds, but not others. Not worth
|
||||||
|
+ # investigating however as S-record conversion can always
|
||||||
|
+ # be done outside of the linker.
|
||||||
|
+ return
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
# Get the offset from an S-record line to the start of the data.
|
||||||
|
|
||||||
|
proc srec_off { l } {
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/pr22001-1b.err 2018-05-31 16:14:12.621539991 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-x86-64/pr22001-1b.err 2018-06-01 11:02:58.554805393 +0100
|
||||||
|
@@ -1,2 +1,2 @@
|
||||||
|
-.*relocation R_X86_64_32S against symbol `copy' can not be used when making a P(D|I)E object; recompile with -fPIC
|
||||||
|
+.*relocation R_X86_64_(PC32|32S) against symbol `copy' can not be used when making a P(D|I)E object; recompile with -fPIC
|
||||||
|
#...
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/pr21997-1b.err 2018-05-31 16:14:12.620540002 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-x86-64/pr21997-1b.err 2018-06-01 11:04:01.535088273 +0100
|
||||||
|
@@ -1,2 +1,2 @@
|
||||||
|
-.*relocation R_X86_64_32S against protected symbol `protected' can not be used when making a P(D|I)E object; recompile with -fPIC
|
||||||
|
+.*relocation R_X86_64_(PC32|32S) against protected symbol `protected' can not be used when making a P(D|I)E object; recompile with -fPIC
|
||||||
|
#...
|
||||||
|
--- binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp 2018-05-31 16:14:12.617540035 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-x86-64/x86-64.exp 2018-06-01 11:05:46.005912951 +0100
|
||||||
|
@@ -1792,7 +1792,7 @@ if { [isnative] && [which $CC] != 0 } {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- undefined_weak "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS"
|
||||||
|
+ # undefined_weak "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS"
|
||||||
|
undefined_weak "-fPIE" ""
|
||||||
|
undefined_weak "-fPIE" "-pie"
|
||||||
|
undefined_weak "-fPIE" "-Wl,-z,nodynamic-undefined-weak"
|
||||||
|
--- binutils.orig/ld/testsuite/ld-size/size-7a.c 2018-05-31 16:14:12.569540562 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-size/size-7a.c 2018-06-01 11:06:44.106265741 +0100
|
||||||
|
@@ -1,11 +1,12 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
-extern char size_of_bar asm ("bar@SIZE");
|
||||||
|
+extern char size_of_bar asm ("bar@SIZE");
|
||||||
|
+char * bar_size = & size_of_bar;
|
||||||
|
|
||||||
|
int
|
||||||
|
-main ()
|
||||||
|
+main (void)
|
||||||
|
{
|
||||||
|
- if (10 == (long) &size_of_bar)
|
||||||
|
+ if (10L == (long) bar_size)
|
||||||
|
printf ("OK\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
--- binutils.orig/ld/testsuite/ld-size/size-8a.c 2018-05-31 16:14:12.568540573 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-size/size-8a.c 2018-06-01 11:07:54.926476839 +0100
|
||||||
|
@@ -1,14 +1,15 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
extern __thread char bar[];
|
||||||
|
-extern char size_of_bar asm ("bar@SIZE");
|
||||||
|
-extern void set_bar (int, int);
|
||||||
|
+extern char size_of_bar asm ("bar@SIZE");
|
||||||
|
+extern void set_bar (int, int);
|
||||||
|
+char * bar_size = & size_of_bar;
|
||||||
|
|
||||||
|
int
|
||||||
|
-main ()
|
||||||
|
+main (void)
|
||||||
|
{
|
||||||
|
set_bar (1, 20);
|
||||||
|
- if (10 == (long) &size_of_bar && bar[1] == 20)
|
||||||
|
+ if (10L == (long) bar_size && bar[1] == 20)
|
||||||
|
printf ("OK\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
--- binutils.orig/ld/testsuite/ld-size/size-4b.c 2018-05-31 16:14:12.569540562 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-size/size-4b.c 2018-06-01 11:09:00.979741038 +0100
|
||||||
|
@@ -2,7 +2,7 @@ extern char bar[];
|
||||||
|
extern char size_of_bar asm ("bar@SIZE");
|
||||||
|
|
||||||
|
char *bar_size_1 = &size_of_bar;
|
||||||
|
-static char *bar_size_2 = &size_of_bar;
|
||||||
|
+char *bar_size_2 = &size_of_bar;
|
||||||
|
|
||||||
|
char *
|
||||||
|
bar_size1 (void)
|
||||||
|
@@ -20,7 +20,7 @@ extern char foo[];
|
||||||
|
extern char size_of_foo asm ("foo@SIZE");
|
||||||
|
|
||||||
|
char *foo_size_1 = &size_of_foo;
|
||||||
|
-static char *foo_size_2 = &size_of_foo;
|
||||||
|
+char *foo_size_2 = &size_of_foo;
|
||||||
|
|
||||||
|
char *
|
||||||
|
foo_size1 (void)
|
||||||
|
--- binutils.orig/ld/testsuite/ld-size/size-5b.c 2018-05-31 16:14:12.569540562 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-size/size-5b.c 2018-06-01 11:09:42.134282596 +0100
|
||||||
|
@@ -2,7 +2,7 @@ extern __thread char bar[];
|
||||||
|
extern char size_of_bar asm ("bar@SIZE");
|
||||||
|
|
||||||
|
char *bar_size_1 = &size_of_bar;
|
||||||
|
-static char *bar_size_2 = &size_of_bar;
|
||||||
|
+char *bar_size_2 = &size_of_bar;
|
||||||
|
|
||||||
|
char *
|
||||||
|
bar_size1 (void)
|
||||||
|
@@ -21,7 +21,7 @@ extern __thread char foo[];
|
||||||
|
extern char size_of_foo asm ("foo@SIZE");
|
||||||
|
|
||||||
|
char *foo_size_1 = &size_of_foo;
|
||||||
|
-static char *foo_size_2 = &size_of_foo;
|
||||||
|
+char *foo_size_2 = &size_of_foo;
|
||||||
|
|
||||||
|
char *
|
||||||
|
foo_size1 (void)
|
||||||
|
--- binutils.orig/ld/testsuite/ld-size/size-6a.c 2018-05-31 16:14:12.568540573 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-size/size-6a.c 2018-06-01 11:11:42.478942015 +0100
|
||||||
|
@@ -1,14 +1,15 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
-extern char bar[];
|
||||||
|
-extern char size_of_bar asm ("bar@SIZE");
|
||||||
|
-extern void set_bar (int, int);
|
||||||
|
+extern char bar[];
|
||||||
|
+extern char size_of_bar asm ("bar@SIZE");
|
||||||
|
+extern void set_bar (int, int);
|
||||||
|
+char * bar_size = & size_of_bar;
|
||||||
|
|
||||||
|
int
|
||||||
|
-main ()
|
||||||
|
+main (void)
|
||||||
|
{
|
||||||
|
set_bar (1, 20);
|
||||||
|
- if (10 == (long) &size_of_bar && bar[1] == 20)
|
||||||
|
+ if (10 == (long) bar_size && bar[1] == 20)
|
||||||
|
printf ("OK\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
--- binutils.orig/ld/testsuite/ld-s390/tlspic_64.dd 2018-05-31 16:14:12.579540452 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-s390/tlspic_64.dd 2018-06-01 13:20:16.509595466 +0100
|
||||||
|
@@ -78,7 +78,7 @@ Disassembly of section .text:
|
||||||
|
+[0-9a-f]+: 00 00 00 60 .long 0x00000060
|
||||||
|
# function prolog
|
||||||
|
+[0-9a-f]+: b9 04 00 ef lgr %r14,%r15
|
||||||
|
- +[0-9a-f]+: c0 c0 [0-9a-f ]+ larl %r12,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_>
|
||||||
|
+ +[0-9a-f]+: c0 c0 [0-9a-f ]+ larl %r12,[0-9a-f]+ <.*>
|
||||||
|
+[0-9a-f]+: a7 fb ff 60 aghi %r15,-160
|
||||||
|
+[0-9a-f]+: e3 e0 e0 00 00 24 stg %r14,0\(%r14\)
|
||||||
|
# extract TCB
|
||||||
|
--- binutils.orig/ld/testsuite/ld-srec/srec.exp 2018-05-31 16:14:12.570540551 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-srec/srec.exp 2018-06-01 13:24:35.262758291 +0100
|
||||||
|
@@ -420,6 +420,8 @@ setup_xfail "bfin-*-linux-uclibc"
|
||||||
|
# generate the format if need be).
|
||||||
|
setup_xfail "tile*-*-*"
|
||||||
|
|
||||||
|
+setup_xfail "s390*-*-*"
|
||||||
|
+
|
||||||
|
run_srec_test $test1 "tmpdir/sr1.o tmpdir/sr2.o"
|
||||||
|
|
||||||
|
# Now try linking a C++ program with global constructors and
|
||||||
|
--- binutils.orig/ld/testsuite/ld-elf/indirect.exp 2018-05-31 16:14:12.649539683 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-elf/indirect.exp 2018-06-01 14:32:22.949232924 +0100
|
||||||
|
@@ -156,12 +156,26 @@ set run_tests {
|
||||||
|
{"Run with libindirect4c.so 4"
|
||||||
|
"-Wl,--no-as-needed tmpdir/libindirect4c.so tmpdir/indirect4b.o tmpdir/indirect4a.o" ""
|
||||||
|
{dummy.c} "indirect4d" "indirect4.out"}
|
||||||
|
- {"Run indirect5 1"
|
||||||
|
- "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libindirect5.so" ""
|
||||||
|
- {indirect5a.c} "indirect5a" "indirect5.out" "$NOPIE_CFLAGS"}
|
||||||
|
- {"Run indirect5 2"
|
||||||
|
- "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/indirect5a.o tmpdir/libindirect5.so" ""
|
||||||
|
- {dummy.c} "indirect5b" "indirect5.out" "$NOPIE_CFLAGS"}
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+run_ld_link_exec_tests $run_tests
|
||||||
|
+
|
||||||
|
+# The s390x system compiler miscompiles these tests.
|
||||||
|
+if { ! [istarget s390x-*-*] } {
|
||||||
|
+
|
||||||
|
+ set run_tests {
|
||||||
|
+ {"Run indirect5 1"
|
||||||
|
+ "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libindirect5.so" ""
|
||||||
|
+ {indirect5a.c} "indirect5a" "indirect5.out" "$NOPIE_CFLAGS"}
|
||||||
|
+ {"Run indirect5 2"
|
||||||
|
+ "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/indirect5a.o tmpdir/libindirect5.so" ""
|
||||||
|
+ {dummy.c} "indirect5b" "indirect5.out" "$NOPIE_CFLAGS"}
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ run_ld_link_exec_tests $run_tests
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+set run_tests {
|
||||||
|
{"Run indirect6 1"
|
||||||
|
"$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libindirect5.so" ""
|
||||||
|
{indirect6a.c} "indirect6a" "indirect5.out" "$NOPIE_CFLAGS"}
|
||||||
|
@@ -213,12 +227,15 @@ proc check_dynamic_syms { test } {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
-foreach t [list indirect5a indirect5b indirect6a indirect6b] {
|
||||||
|
- set testname [concat $t "dynsym"]
|
||||||
|
- if { [check_dynamic_syms tmpdir/$t] } {
|
||||||
|
- pass $testname
|
||||||
|
- } else {
|
||||||
|
- fail $testname
|
||||||
|
+# The s390x system compiler miscompiles indirect5 tests.
|
||||||
|
+if { ! [istarget s390x-*-*] } {
|
||||||
|
+ foreach t [list indirect5a indirect5b indirect6a indirect6b] {
|
||||||
|
+ set testname [concat $t "dynsym"]
|
||||||
|
+ if { [check_dynamic_syms tmpdir/$t] } {
|
||||||
|
+ pass $testname
|
||||||
|
+ } else {
|
||||||
|
+ fail $testname
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -229,13 +246,22 @@ if { ! [string match "" $exec_output] }
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
+
|
||||||
|
+# The s390x system compiler miscompiles these tests.
|
||||||
|
+if { ! [istarget s390x-*-*] } {
|
||||||
|
+ set pie_tests {
|
||||||
|
+ {"Run indirect5 3"
|
||||||
|
+ "-pie -Wl,--no-as-needed tmpdir/libindirect5.so" ""
|
||||||
|
+ {indirect5a.c} "indirect5c" "indirect5.out" "-fPIE"}
|
||||||
|
+ {"Run indirect5 4"
|
||||||
|
+ "-pie -Wl,--no-as-needed tmpdir/indirect5a.o tmpdir/libindirect5.so" ""
|
||||||
|
+ {dummy.c} "indirect5d" "indirect5.out" "-fPIE"}
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ run_ld_link_exec_tests $pie_tests
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
set pie_tests {
|
||||||
|
- {"Run indirect5 3"
|
||||||
|
- "-pie -Wl,--no-as-needed tmpdir/libindirect5.so" ""
|
||||||
|
- {indirect5a.c} "indirect5c" "indirect5.out" "-fPIE"}
|
||||||
|
- {"Run indirect5 4"
|
||||||
|
- "-pie -Wl,--no-as-needed tmpdir/indirect5a.o tmpdir/libindirect5.so" ""
|
||||||
|
- {dummy.c} "indirect5d" "indirect5.out" "-fPIE"}
|
||||||
|
{"Run indirect6 3"
|
||||||
|
"-pie -Wl,--no-as-needed tmpdir/libindirect5.so" ""
|
||||||
|
{indirect6a.c} "indirect6c" "indirect5.out" "-fPIE"}
|
||||||
|
@@ -246,11 +272,14 @@ set pie_tests {
|
||||||
|
|
||||||
|
run_ld_link_exec_tests $pie_tests
|
||||||
|
|
||||||
|
-foreach t [list indirect5c indirect5d indirect6c indirect6d] {
|
||||||
|
- set testname [concat $t "dynsym"]
|
||||||
|
- if { [check_dynamic_syms tmpdir/$t] } {
|
||||||
|
- pass $testname
|
||||||
|
- } else {
|
||||||
|
- fail $testname
|
||||||
|
+# The s390x system compiler miscompiles indirect5 tests.
|
||||||
|
+if { ! [istarget s390x-*-*] } {
|
||||||
|
+ foreach t [list indirect5c indirect5d indirect6c indirect6d] {
|
||||||
|
+ set testname [concat $t "dynsym"]
|
||||||
|
+ if { [check_dynamic_syms tmpdir/$t] } {
|
||||||
|
+ pass $testname
|
||||||
|
+ } else {
|
||||||
|
+ fail $testname
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--- binutils.orig/ld/testsuite/ld-elfvers/vers.exp 2018-05-31 16:14:12.572540529 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-elfvers/vers.exp 2018-06-01 15:23:36.518815276 +0100
|
||||||
|
@@ -938,6 +938,7 @@ if [string match "yes" $pic] then {
|
||||||
|
build_exec "vers23" vers23.c vers23 "-Wl,--no-as-needed tmpdir/vers23a.so tmpdir/vers23b.o tmpdir/vers23b.so" "" vers23.ver vers23.dsym ""
|
||||||
|
}
|
||||||
|
|
||||||
|
+if {! [istarget ppc64*-*-*] } {
|
||||||
|
# Test .symver x,x@VERS.0
|
||||||
|
set as_pic_flags ""
|
||||||
|
if [istarget sparc*-*-*] {
|
||||||
|
@@ -955,6 +956,7 @@ run_ld_link_tests [list "\"vers24c\"
|
||||||
|
\"-shared --version-script $srcdir/$subdir/vers24.map\" \"\"
|
||||||
|
\"$as_pic_flags $as_options\" {vers24c.c} { { readelf -Wrs vers24.rd } }
|
||||||
|
\"libvers24c.so\" \"-fpic\""]
|
||||||
|
+}
|
||||||
|
|
||||||
|
# Test versioned definition vs. normal definition in different files.
|
||||||
|
if [string match "yes" $pic] then {
|
||||||
|
--- binutils.orig/ld/testsuite/ld-ifunc/ifunc.exp 2018-05-31 16:14:12.573540519 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-ifunc/ifunc.exp 2018-06-01 15:26:52.020691739 +0100
|
||||||
|
@@ -284,11 +284,14 @@ if {! [check_osabi tmpdir/static_nonifun
|
||||||
|
# The linked ifunc using executables and the shared library containing
|
||||||
|
# ifunc should contain an IFUNC symbol. The non-ifunc using executable
|
||||||
|
# should not.
|
||||||
|
-
|
||||||
|
+if { ![istarget "ppc*-*-*"] } {
|
||||||
|
if {[contains_ifunc_symbol tmpdir/libshared_ifunc.so] != 1} {
|
||||||
|
fail "Shared libraries containing ifunc does not contain an IFUNC symbol"
|
||||||
|
set fails [expr $fails + 1]
|
||||||
|
}
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+if { ![istarget "ppc*-*-*"] } {
|
||||||
|
if {[contains_ifunc_symbol tmpdir/local_prog] != 1} {
|
||||||
|
fail "Local ifunc-using executable does not contain an IFUNC symbol"
|
||||||
|
set fails [expr $fails + 1]
|
||||||
|
@@ -297,6 +300,7 @@ if {[contains_ifunc_symbol tmpdir/static
|
||||||
|
fail "Static ifunc-using executable does not contain an IFUNC symbol"
|
||||||
|
set fails [expr $fails + 1]
|
||||||
|
}
|
||||||
|
+}
|
||||||
|
if {[contains_ifunc_symbol tmpdir/dynamic_prog] != 0} {
|
||||||
|
fail "Dynamic ifunc-using executable contains an IFUNC symbol"
|
||||||
|
set fails [expr $fails + 1]
|
||||||
|
--- binutils.orig/ld/testsuite/ld-plugin/plugin.exp 2018-05-31 16:14:12.580540442 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-plugin/plugin.exp 2018-06-01 15:29:44.048823172 +0100
|
||||||
|
@@ -293,12 +293,14 @@ if { !$can_compile || $failed_compile }
|
||||||
|
|
||||||
|
run_ld_link_tests $plugin_tests
|
||||||
|
|
||||||
|
+if { ! [istarget "ppc*-*-*"] } {
|
||||||
|
if { [is_elf_format] \
|
||||||
|
&& [ld_compile "$CC $CFLAGS" $srcdir/$subdir/func1p.c tmpdir/func1p.o] \
|
||||||
|
&& [ld_compile "$CC $CFLAGS" $srcdir/$subdir/func2i.c tmpdir/func2i.o] \
|
||||||
|
&& [ld_compile "$CC $CFLAGS" $srcdir/$subdir/func3h.c tmpdir/func3h.o] } {
|
||||||
|
run_ld_link_tests $plugin_extra_elf_tests
|
||||||
|
}
|
||||||
|
+}
|
||||||
|
|
||||||
|
if {![ar_simple_create $ar "" "tmpdir/libtext.a" "tmpdir/text.o"] || \
|
||||||
|
![ar_simple_create $ar "" "tmpdir/libempty.a" ""]} {
|
||||||
|
--- binutils.orig/ld/testsuite/ld-elf/tls.exp 2018-07-09 09:49:50.488248175 +0100
|
||||||
|
+++ binutils-2.30.90/ld/testsuite/ld-elf/tls.exp 2018-07-09 10:46:26.449688046 +0100
|
||||||
|
@@ -39,7 +39,9 @@ if [istarget "sparc*-*-*"] {
|
||||||
|
append AFLAGS_PIC " -K PIC"
|
||||||
|
}
|
||||||
|
|
||||||
|
-run_ld_link_tests [list \
|
||||||
|
+# The s390x system compiler miscompiles these tests.
|
||||||
|
+if { ! [istarget s390x-*-*] } {
|
||||||
|
+ run_ld_link_tests [list \
|
||||||
|
[list \
|
||||||
|
"Build pr22263-1" \
|
||||||
|
"-pie -e _start -z text" \
|
||||||
|
@@ -51,3 +53,4 @@ run_ld_link_tests [list \
|
||||||
|
"-fPIE -O2" \
|
||||||
|
] \
|
||||||
|
]
|
||||||
|
+}
|
||||||
10
binutils-gold-ignore-discarded-note-relocs.patch
Normal file
10
binutils-gold-ignore-discarded-note-relocs.patch
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
--- binutils.orig/gold/target-reloc.h 2018-07-12 11:37:24.894494658 +0100
|
||||||
|
+++ binutils-2.30.90/gold/target-reloc.h 2018-07-12 15:38:50.049083904 +0100
|
||||||
|
@@ -136,6 +136,7 @@ class Default_comdat_behavior
|
||||||
|
if (Layout::is_debug_info_section(name))
|
||||||
|
return CB_PRETEND;
|
||||||
|
if (strcmp(name, ".eh_frame") == 0
|
||||||
|
+ || strncmp(name, ".gnu.build.attributes", 21) == 0 // FIXME: We should really be checking the section type for ST_NOTE...
|
||||||
|
|| strcmp(name, ".gcc_except_table") == 0)
|
||||||
|
return CB_IGNORE;
|
||||||
|
return CB_ERROR;
|
||||||
23
binutils-merge-attribute-sections.patch
Normal file
23
binutils-merge-attribute-sections.patch
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
diff -rup binutils.orig/gold/layout.cc binutils-2.31.1/gold/layout.cc
|
||||||
|
--- binutils.orig/gold/layout.cc 2018-07-27 11:49:15.188939352 +0100
|
||||||
|
+++ binutils-2.31.1/gold/layout.cc 2018-07-27 11:50:03.984405949 +0100
|
||||||
|
@@ -5429,6 +5429,7 @@ const Layout::Section_name_mapping Layou
|
||||||
|
MAPPING_INIT(".gnu.linkonce.armextab.", ".ARM.extab"),
|
||||||
|
MAPPING_INIT(".ARM.exidx", ".ARM.exidx"),
|
||||||
|
MAPPING_INIT(".gnu.linkonce.armexidx.", ".ARM.exidx"),
|
||||||
|
+ MAPPING_INIT(".gnu.build.attributes.", ".gnu.build.attributes"),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Mapping for ".text" section prefixes with -z,keep-text-section-prefix.
|
||||||
|
diff -rup binutils.orig/ld/scripttempl/elf.sc binutils-2.31.1/ld/scripttempl/elf.sc
|
||||||
|
--- binutils.orig/ld/scripttempl/elf.sc 2018-07-30 10:48:58.409509857 +0100
|
||||||
|
+++ binutils-2.31.1/ld/scripttempl/elf.sc 2018-07-30 10:49:09.267393364 +0100
|
||||||
|
@@ -692,6 +692,8 @@ cat <<EOF
|
||||||
|
|
||||||
|
.comment 0 : { *(.comment) }
|
||||||
|
|
||||||
|
+ .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
|
||||||
|
+
|
||||||
|
EOF
|
||||||
|
|
||||||
|
. $srcdir/scripttempl/DWARF.sc
|
||||||
62
binutils-note-merge-improvements.patch
Normal file
62
binutils-note-merge-improvements.patch
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
--- binutils.orig/binutils/objcopy.c 2018-08-06 09:11:02.053503486 +0100
|
||||||
|
+++ binutils-2.30/binutils/objcopy.c 2018-08-06 09:11:23.296329566 +0100
|
||||||
|
@@ -2174,7 +2174,7 @@ merge_gnu_build_notes (bfd * abfd, asect
|
||||||
|
3. Eliminate any NT_GNU_BUILD_ATTRIBUTE_OPEN notes that have the same
|
||||||
|
full name field as the immediately preceeding note with the same type
|
||||||
|
of name and whose address ranges coincide.
|
||||||
|
- IE - it there are gaps in the coverage of the notes, then these gaps
|
||||||
|
+ IE - if there are gaps in the coverage of the notes, then these gaps
|
||||||
|
must be preserved.
|
||||||
|
4. Combine the numeric value of any NT_GNU_BUILD_ATTRIBUTE_OPEN notes
|
||||||
|
of type GNU_BUILD_ATTRIBUTE_STACK_SIZE.
|
||||||
|
@@ -2182,16 +2182,48 @@ merge_gnu_build_notes (bfd * abfd, asect
|
||||||
|
its description field is empty then the nearest preceeding OPEN note
|
||||||
|
with a non-empty description field must also be preserved *OR* the
|
||||||
|
description field of the note must be changed to contain the starting
|
||||||
|
- address to which it refers. */
|
||||||
|
+ address to which it refers.
|
||||||
|
+ 6. Notes with the same start and end address can be deleted. */
|
||||||
|
for (pnote = pnotes + 1; pnote < pnotes_end; pnote ++)
|
||||||
|
{
|
||||||
|
int note_type;
|
||||||
|
objcopy_internal_note * back;
|
||||||
|
objcopy_internal_note * prev_open_with_range = NULL;
|
||||||
|
|
||||||
|
+ /* Rule 6 - delete 0-range notes. */
|
||||||
|
+ if (pnote->start == pnote->end)
|
||||||
|
+ {
|
||||||
|
+ duplicate_found = TRUE;
|
||||||
|
+ pnote->note.type = 0;
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* Rule 2 - preserve function notes. */
|
||||||
|
if (! is_open_note (pnote))
|
||||||
|
- continue;
|
||||||
|
+ {
|
||||||
|
+ int iter;
|
||||||
|
+
|
||||||
|
+ /* Check to see if there is an identical previous function note.
|
||||||
|
+ This can happen with overlays for example. */
|
||||||
|
+ for (iter = 0, back = pnote -1; back >= pnotes; back --)
|
||||||
|
+ {
|
||||||
|
+ if (back->start == pnote->start
|
||||||
|
+ && back->end == pnote->end
|
||||||
|
+ && back->note.namesz == pnote->note.namesz
|
||||||
|
+ && memcmp (back->note.namedata, pnote->note.namedata, pnote->note.namesz) == 0)
|
||||||
|
+ {
|
||||||
|
+ fprintf (stderr, "DUP FUNXC\n");
|
||||||
|
+ duplicate_found = TRUE;
|
||||||
|
+ pnote->note.type = 0;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Don't scan too far back however. */
|
||||||
|
+ if (iter ++ > 16)
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
note_type = pnote->note.namedata[attribute_type_byte];
|
||||||
|
|
||||||
66
binutils-readelf-other-sym-info.patch
Normal file
66
binutils-readelf-other-sym-info.patch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
diff -rup binutils.orig/binutils/readelf.c binutils-2.29/binutils/readelf.c
|
||||||
|
--- binutils.orig/binutils/readelf.c 2017-12-12 16:24:19.571221194 +0000
|
||||||
|
+++ binutils-2.29/binutils/readelf.c 2017-12-12 16:27:26.997979803 +0000
|
||||||
|
@@ -11018,12 +11018,14 @@ print_dynamic_symbol (bfd_vma si, unsign
|
||||||
|
unsigned int vis = ELF_ST_VISIBILITY (psym->st_other);
|
||||||
|
|
||||||
|
printf (" %-7s", get_symbol_visibility (vis));
|
||||||
|
+#if 0
|
||||||
|
/* Check to see if any other bits in the st_other field are set.
|
||||||
|
Note - displaying this information disrupts the layout of the
|
||||||
|
table being generated, but for the moment this case is very
|
||||||
|
rare. */
|
||||||
|
if (psym->st_other ^ vis)
|
||||||
|
printf (" [%s] ", get_symbol_other (filedata, psym->st_other ^ vis));
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
printf (" %3.3s ", get_symbol_index_type (filedata, psym->st_shndx));
|
||||||
|
@@ -11031,6 +11033,15 @@ print_dynamic_symbol (bfd_vma si, unsign
|
||||||
|
print_symbol (25, GET_DYNAMIC_NAME (psym->st_name));
|
||||||
|
else
|
||||||
|
printf (_(" <corrupt: %14ld>"), psym->st_name);
|
||||||
|
+#if 1
|
||||||
|
+ {
|
||||||
|
+ unsigned int vis = ELF_ST_VISIBILITY (psym->st_other);
|
||||||
|
+
|
||||||
|
+ /* Check to see if any other bits in the st_other field are set. */
|
||||||
|
+ if (psym->st_other ^ vis)
|
||||||
|
+ printf (" \t[%s]", get_symbol_other (filedata, psym->st_other ^ vis));
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
putchar ('\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
--- binutils.orig/binutils/readelf.c 2017-12-12 16:36:21.806561149 +0000
|
||||||
|
+++ binutils-2.29.1/binutils/readelf.c 2017-12-12 16:38:17.763168514 +0000
|
||||||
|
@@ -11548,11 +11548,13 @@ process_symbol_table (FILE * file)
|
||||||
|
unsigned int vis = ELF_ST_VISIBILITY (psym->st_other);
|
||||||
|
|
||||||
|
printf (" %-7s", get_symbol_visibility (vis));
|
||||||
|
+#if 0
|
||||||
|
/* Check to see if any other bits in the st_other field are set.
|
||||||
|
Note - displaying this information disrupts the layout of the
|
||||||
|
table being generated, but for the moment this case is very rare. */
|
||||||
|
if (psym->st_other ^ vis)
|
||||||
|
printf (" [%s] ", get_symbol_other (filedata, psym->st_other ^ vis));
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
printf (" %4s ", get_symbol_index_type (filedata, psym->st_shndx));
|
||||||
|
print_symbol (25, psym->st_name < strtab_size
|
||||||
|
@@ -11571,7 +11573,15 @@ process_symbol_table (FILE * file)
|
||||||
|
printf (sym_info == symbol_hidden ? "@%s" : "@@%s",
|
||||||
|
version_string);
|
||||||
|
}
|
||||||
|
+#if 1
|
||||||
|
+ {
|
||||||
|
+ unsigned int vis = ELF_ST_VISIBILITY (psym->st_other);
|
||||||
|
|
||||||
|
+ /* Check to see if any other bits in the st_other field are set. */
|
||||||
|
+ if (psym->st_other ^ vis)
|
||||||
|
+ printf (" \t[%s] ", get_symbol_other (filedata, psym->st_other ^ vis));
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
putchar ('\n');
|
||||||
|
|
||||||
|
if (ELF_ST_BIND (psym->st_info) == STB_LOCAL
|
||||||
872
binutils-s390-partial-relro.patch
Normal file
872
binutils-s390-partial-relro.patch
Normal file
@ -0,0 +1,872 @@
|
|||||||
|
diff -rup binutils.orig/bfd/elf64-s390.c binutils-2.31.1/bfd/elf64-s390.c
|
||||||
|
--- binutils.orig/bfd/elf64-s390.c 2018-07-19 12:37:28.107030007 +0100
|
||||||
|
+++ binutils-2.31.1/bfd/elf64-s390.c 2018-07-19 12:38:11.235548717 +0100
|
||||||
|
@@ -481,7 +481,7 @@ elf_s390_is_local_label_name (bfd *abfd,
|
||||||
|
|
||||||
|
#define RELA_ENTRY_SIZE sizeof (Elf64_External_Rela)
|
||||||
|
|
||||||
|
-/* The first three entries in a procedure linkage table are reserved,
|
||||||
|
+/* The first three entries in a global offset table are reserved,
|
||||||
|
and the initial contents are unimportant (we zero them out).
|
||||||
|
Subsequent entries look like this. See the SVR4 ABI 386
|
||||||
|
supplement to see how this works. */
|
||||||
|
@@ -511,8 +511,8 @@ elf_s390_is_local_label_name (bfd *abfd,
|
||||||
|
LG 1,0(1) # 6 bytes Load address from GOT in r1
|
||||||
|
BCR 15,1 # 2 bytes Jump to address
|
||||||
|
RET1: BASR 1,0 # 2 bytes Return from GOT 1st time
|
||||||
|
- LGF 1,12(1) # 6 bytes Load offset in symbl table in r1
|
||||||
|
- BRCL 15,-x # 6 bytes Jump to start of PLT
|
||||||
|
+ LGF 1,12(1) # 6 bytes Load rela.plt offset into r1
|
||||||
|
+ BRCL 15,-x # 6 bytes Jump to first PLT entry
|
||||||
|
.long ? # 4 bytes offset into .rela.plt
|
||||||
|
|
||||||
|
Total = 32 bytes per PLT entry
|
||||||
|
@@ -1605,8 +1605,7 @@ allocate_dynrelocs (struct elf_link_hash
|
||||||
|
/* Make room for this entry. */
|
||||||
|
s->size += PLT_ENTRY_SIZE;
|
||||||
|
|
||||||
|
- /* We also need to make an entry in the .got.plt section, which
|
||||||
|
- will be placed in the .got section by the linker script. */
|
||||||
|
+ /* We also need to make an entry in the .got.plt section. */
|
||||||
|
htab->elf.sgotplt->size += GOT_ENTRY_SIZE;
|
||||||
|
|
||||||
|
/* We also need to make an entry in the .rela.plt section. */
|
||||||
|
@@ -1831,6 +1830,20 @@ elf_s390_size_dynamic_sections (bfd *out
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (htab->elf.sgot && s390_gotplt_after_got_p (info))
|
||||||
|
+ {
|
||||||
|
+ /* _bfd_elf_create_got_section adds the got header size always
|
||||||
|
+ to .got.plt but we need it in .got if this section comes
|
||||||
|
+ first. */
|
||||||
|
+ htab->elf.sgot->size += 3 * GOT_ENTRY_SIZE;
|
||||||
|
+ htab->elf.sgotplt->size -= 3 * GOT_ENTRY_SIZE;
|
||||||
|
+
|
||||||
|
+ /* Make the _GLOBAL_OFFSET_TABLE_ symbol point to the .got
|
||||||
|
+ instead of .got.plt. */
|
||||||
|
+ htab->elf.hgot->root.u.def.section = htab->elf.sgot;
|
||||||
|
+ htab->elf.hgot->root.u.def.value = 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* Set up .got offsets for local syms, and space for local dynamic
|
||||||
|
relocs. */
|
||||||
|
for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
|
||||||
|
@@ -2131,7 +2144,6 @@ elf_s390_relocate_section (bfd *output_b
|
||||||
|
bfd_boolean unresolved_reloc;
|
||||||
|
bfd_reloc_status_type r;
|
||||||
|
int tls_type;
|
||||||
|
- asection *base_got = htab->elf.sgot;
|
||||||
|
bfd_boolean resolved_to_zero;
|
||||||
|
|
||||||
|
r_type = ELF64_R_TYPE (rel->r_info);
|
||||||
|
@@ -2172,7 +2184,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||||
|
case R_390_PLTOFF16:
|
||||||
|
case R_390_PLTOFF32:
|
||||||
|
case R_390_PLTOFF64:
|
||||||
|
- relocation -= htab->elf.sgot->output_section->vma;
|
||||||
|
+ relocation -= s390_got_pointer (info);
|
||||||
|
break;
|
||||||
|
case R_390_GOTPLT12:
|
||||||
|
case R_390_GOTPLT16:
|
||||||
|
@@ -2192,10 +2204,10 @@ elf_s390_relocate_section (bfd *output_b
|
||||||
|
htab->elf.sgot->contents +
|
||||||
|
local_got_offsets[r_symndx]);
|
||||||
|
relocation = (local_got_offsets[r_symndx] +
|
||||||
|
- htab->elf.sgot->output_offset);
|
||||||
|
+ s390_got_offset (info));
|
||||||
|
|
||||||
|
if (r_type == R_390_GOTENT || r_type == R_390_GOTPLTENT)
|
||||||
|
- relocation += htab->elf.sgot->output_section->vma;
|
||||||
|
+ relocation += s390_got_pointer (info);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
@@ -2254,25 +2266,23 @@ elf_s390_relocate_section (bfd *output_b
|
||||||
|
|
||||||
|
if (s390_is_ifunc_symbol_p (h))
|
||||||
|
{
|
||||||
|
+ /* Entry indices of .iplt and .igot.plt match
|
||||||
|
+ 1:1. No magic PLT first entry here. */
|
||||||
|
plt_index = h->plt.offset / PLT_ENTRY_SIZE;
|
||||||
|
- relocation = (plt_index * GOT_ENTRY_SIZE +
|
||||||
|
- htab->elf.igotplt->output_offset);
|
||||||
|
- if (r_type == R_390_GOTPLTENT)
|
||||||
|
- relocation += htab->elf.igotplt->output_section->vma;
|
||||||
|
+ relocation = (plt_index * GOT_ENTRY_SIZE
|
||||||
|
+ + s390_gotplt_offset (info)
|
||||||
|
+ + htab->elf.igotplt->output_offset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- /* Calc. index no.
|
||||||
|
- Current offset - size first entry / entry size. */
|
||||||
|
- plt_index = (h->plt.offset - PLT_FIRST_ENTRY_SIZE) /
|
||||||
|
- PLT_ENTRY_SIZE;
|
||||||
|
-
|
||||||
|
- /* Offset in GOT is PLT index plus GOT headers(3)
|
||||||
|
- times 8, addr & GOT addr. */
|
||||||
|
- relocation = (plt_index + 3) * GOT_ENTRY_SIZE;
|
||||||
|
- if (r_type == R_390_GOTPLTENT)
|
||||||
|
- relocation += htab->elf.sgot->output_section->vma;
|
||||||
|
+ plt_index = ((h->plt.offset - PLT_FIRST_ENTRY_SIZE)
|
||||||
|
+ / PLT_ENTRY_SIZE);
|
||||||
|
+
|
||||||
|
+ relocation = (plt_index * GOT_ENTRY_SIZE
|
||||||
|
+ + s390_gotplt_offset (info));
|
||||||
|
}
|
||||||
|
+ if (r_type == R_390_GOTPLTENT)
|
||||||
|
+ relocation += s390_got_pointer (info);
|
||||||
|
unresolved_reloc = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
@@ -2286,7 +2296,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||||
|
case R_390_GOTENT:
|
||||||
|
/* Relocation is to the entry for this symbol in the global
|
||||||
|
offset table. */
|
||||||
|
- if (base_got == NULL)
|
||||||
|
+ if (htab->elf.sgot == NULL)
|
||||||
|
abort ();
|
||||||
|
|
||||||
|
if (h != NULL)
|
||||||
|
@@ -2303,8 +2313,19 @@ elf_s390_relocate_section (bfd *output_b
|
||||||
|
{
|
||||||
|
/* No explicit GOT usage so redirect to the
|
||||||
|
got.iplt slot. */
|
||||||
|
- base_got = htab->elf.igotplt;
|
||||||
|
- off = h->plt.offset / PLT_ENTRY_SIZE * GOT_ENTRY_SIZE;
|
||||||
|
+ relocation = (s390_gotplt_offset (info)
|
||||||
|
+ + htab->elf.igotplt->output_offset
|
||||||
|
+ + (h->plt.offset / PLT_ENTRY_SIZE
|
||||||
|
+ * GOT_ENTRY_SIZE));
|
||||||
|
+
|
||||||
|
+ /* For @GOTENT the relocation is against the offset between
|
||||||
|
+ the instruction and the symbols entry in the GOT and not
|
||||||
|
+ between the start of the GOT and the symbols entry. We
|
||||||
|
+ add the vma of the GOT to get the correct value. */
|
||||||
|
+ if (r_type == R_390_GOTENT || r_type == R_390_GOTPLTENT)
|
||||||
|
+ relocation += s390_got_pointer (info);
|
||||||
|
+
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@@ -2337,7 +2358,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bfd_put_64 (output_bfd, relocation,
|
||||||
|
- base_got->contents + off);
|
||||||
|
+ htab->elf.sgot->contents + off);
|
||||||
|
h->got.offset |= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2419,7 +2440,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||||
|
if (off >= (bfd_vma) -2)
|
||||||
|
abort ();
|
||||||
|
|
||||||
|
- relocation = base_got->output_offset + off;
|
||||||
|
+ relocation = s390_got_offset (info) + off;
|
||||||
|
|
||||||
|
/* For @GOTENT the relocation is against the offset between
|
||||||
|
the instruction and the symbols entry in the GOT and not
|
||||||
|
@@ -2427,7 +2448,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||||
|
add the vma of the GOT to get the correct value. */
|
||||||
|
if ( r_type == R_390_GOTENT
|
||||||
|
|| r_type == R_390_GOTPLTENT)
|
||||||
|
- relocation += base_got->output_section->vma;
|
||||||
|
+ relocation += s390_got_pointer (info);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -2445,22 +2466,17 @@ elf_s390_relocate_section (bfd *output_b
|
||||||
|
relocation = (htab->elf.iplt->output_section->vma
|
||||||
|
+ htab->elf.iplt->output_offset
|
||||||
|
+ h->plt.offset
|
||||||
|
- - htab->elf.sgot->output_section->vma);
|
||||||
|
+ - s390_got_pointer (info));
|
||||||
|
goto do_relocation;
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* Note that sgot->output_offset is not involved in this
|
||||||
|
- calculation. We always want the start of .got. If we
|
||||||
|
- defined _GLOBAL_OFFSET_TABLE in a different way, as is
|
||||||
|
- permitted by the ABI, we might have to change this
|
||||||
|
- calculation. */
|
||||||
|
- relocation -= htab->elf.sgot->output_section->vma;
|
||||||
|
+ relocation -= s390_got_pointer (info);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case R_390_GOTPC:
|
||||||
|
case R_390_GOTPCDBL:
|
||||||
|
/* Use global offset table as symbol value. */
|
||||||
|
- relocation = htab->elf.sgot->output_section->vma;
|
||||||
|
+ relocation = s390_got_pointer (info);
|
||||||
|
unresolved_reloc = FALSE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -2509,7 +2525,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||||
|
|| h->plt.offset == (bfd_vma) -1
|
||||||
|
|| (htab->elf.splt == NULL && !s390_is_ifunc_symbol_p (h)))
|
||||||
|
{
|
||||||
|
- relocation -= htab->elf.sgot->output_section->vma;
|
||||||
|
+ relocation -= s390_got_pointer (info);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2517,12 +2533,12 @@ elf_s390_relocate_section (bfd *output_b
|
||||||
|
relocation = (htab->elf.iplt->output_section->vma
|
||||||
|
+ htab->elf.iplt->output_offset
|
||||||
|
+ h->plt.offset
|
||||||
|
- - htab->elf.sgot->output_section->vma);
|
||||||
|
+ - s390_got_pointer (info));
|
||||||
|
else
|
||||||
|
relocation = (htab->elf.splt->output_section->vma
|
||||||
|
+ htab->elf.splt->output_offset
|
||||||
|
+ h->plt.offset
|
||||||
|
- - htab->elf.sgot->output_section->vma);
|
||||||
|
+ - s390_got_pointer (info));
|
||||||
|
unresolved_reloc = FALSE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -3296,7 +3312,7 @@ elf_s390_finish_dynamic_symbol (bfd *out
|
||||||
|
if (h->plt.offset != (bfd_vma) -1)
|
||||||
|
{
|
||||||
|
bfd_vma plt_index;
|
||||||
|
- bfd_vma got_offset;
|
||||||
|
+ bfd_vma gotplt_offset;
|
||||||
|
Elf_Internal_Rela rela;
|
||||||
|
bfd_byte *loc;
|
||||||
|
|
||||||
|
@@ -3325,18 +3341,25 @@ elf_s390_finish_dynamic_symbol (bfd *out
|
||||||
|
Current offset - size first entry / entry size. */
|
||||||
|
plt_index = (h->plt.offset - PLT_FIRST_ENTRY_SIZE) / PLT_ENTRY_SIZE;
|
||||||
|
|
||||||
|
- /* Offset in GOT is PLT index plus GOT headers(3) times 8,
|
||||||
|
- addr & GOT addr. */
|
||||||
|
- got_offset = (plt_index + 3) * GOT_ENTRY_SIZE;
|
||||||
|
+ /* The slots in the .got.plt correspond to the PLT slots in
|
||||||
|
+ the same order. */
|
||||||
|
+ gotplt_offset = plt_index * GOT_ENTRY_SIZE;
|
||||||
|
+
|
||||||
|
+ /* If .got.plt comes first it needs to contain the 3 header
|
||||||
|
+ entries. */
|
||||||
|
+ if (!s390_gotplt_after_got_p (info))
|
||||||
|
+ gotplt_offset += 3 * GOT_ENTRY_SIZE;
|
||||||
|
|
||||||
|
/* Fill in the blueprint of a PLT. */
|
||||||
|
memcpy (htab->elf.splt->contents + h->plt.offset, elf_s390x_plt_entry,
|
||||||
|
PLT_ENTRY_SIZE);
|
||||||
|
|
||||||
|
- /* Fixup the relative address to the GOT entry */
|
||||||
|
+ /* The first instruction in the PLT entry is a LARL loading
|
||||||
|
+ the address of the GOT slot. We write the 4 byte
|
||||||
|
+ immediate operand of the LARL instruction here. */
|
||||||
|
bfd_put_32 (output_bfd,
|
||||||
|
(htab->elf.sgotplt->output_section->vma +
|
||||||
|
- htab->elf.sgotplt->output_offset + got_offset
|
||||||
|
+ htab->elf.sgotplt->output_offset + gotplt_offset
|
||||||
|
- (htab->elf.splt->output_section->vma +
|
||||||
|
htab->elf.splt->output_offset +
|
||||||
|
h->plt.offset))/2,
|
||||||
|
@@ -3356,12 +3379,12 @@ elf_s390_finish_dynamic_symbol (bfd *out
|
||||||
|
+ htab->elf.splt->output_offset
|
||||||
|
+ h->plt.offset
|
||||||
|
+ 14),
|
||||||
|
- htab->elf.sgotplt->contents + got_offset);
|
||||||
|
+ htab->elf.sgotplt->contents + gotplt_offset);
|
||||||
|
|
||||||
|
/* Fill in the entry in the .rela.plt section. */
|
||||||
|
rela.r_offset = (htab->elf.sgotplt->output_section->vma
|
||||||
|
+ htab->elf.sgotplt->output_offset
|
||||||
|
- + got_offset);
|
||||||
|
+ + gotplt_offset);
|
||||||
|
rela.r_info = ELF64_R_INFO (h->dynindx, R_390_JMP_SLOT);
|
||||||
|
rela.r_addend = 0;
|
||||||
|
loc = htab->elf.srelplt->contents + plt_index *
|
||||||
|
@@ -3568,8 +3591,8 @@ elf_s390_finish_dynamic_sections (bfd *o
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case DT_PLTGOT:
|
||||||
|
- s = htab->elf.sgotplt;
|
||||||
|
- dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
|
||||||
|
+ /* DT_PLTGOT matches _GLOBAL_OFFSET_TABLE_ */
|
||||||
|
+ dyn.d_un.d_ptr = s390_got_pointer (info);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DT_JMPREL:
|
||||||
|
@@ -3606,10 +3629,11 @@ elf_s390_finish_dynamic_sections (bfd *o
|
||||||
|
/* fill in blueprint for plt 0 entry */
|
||||||
|
memcpy (htab->elf.splt->contents, elf_s390x_first_plt_entry,
|
||||||
|
PLT_FIRST_ENTRY_SIZE);
|
||||||
|
- /* Fixup relative address to start of GOT */
|
||||||
|
+ /* The second instruction in the first PLT entry is a LARL
|
||||||
|
+ loading the GOT pointer. Fill in the LARL immediate
|
||||||
|
+ address. */
|
||||||
|
bfd_put_32 (output_bfd,
|
||||||
|
- (htab->elf.sgotplt->output_section->vma
|
||||||
|
- + htab->elf.sgotplt->output_offset
|
||||||
|
+ (s390_got_pointer (info)
|
||||||
|
- htab->elf.splt->output_section->vma
|
||||||
|
- htab->elf.splt->output_offset - 6)/2,
|
||||||
|
htab->elf.splt->contents + 8);
|
||||||
|
@@ -3619,21 +3643,22 @@ elf_s390_finish_dynamic_sections (bfd *o
|
||||||
|
= PLT_ENTRY_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (htab->elf.sgotplt)
|
||||||
|
+ if (htab->elf.hgot && htab->elf.hgot->root.u.def.section)
|
||||||
|
{
|
||||||
|
/* Fill in the first three entries in the global offset table. */
|
||||||
|
- if (htab->elf.sgotplt->size > 0)
|
||||||
|
+ if (htab->elf.hgot->root.u.def.section->size > 0)
|
||||||
|
{
|
||||||
|
bfd_put_64 (output_bfd,
|
||||||
|
(sdyn == NULL ? (bfd_vma) 0
|
||||||
|
: sdyn->output_section->vma + sdyn->output_offset),
|
||||||
|
- htab->elf.sgotplt->contents);
|
||||||
|
+ htab->elf.hgot->root.u.def.section->contents);
|
||||||
|
/* One entry for shared object struct ptr. */
|
||||||
|
- bfd_put_64 (output_bfd, (bfd_vma) 0, htab->elf.sgotplt->contents + 8);
|
||||||
|
+ bfd_put_64 (output_bfd, (bfd_vma) 0,
|
||||||
|
+ htab->elf.hgot->root.u.def.section->contents + 8);
|
||||||
|
/* One entry for _dl_runtime_resolve. */
|
||||||
|
- bfd_put_64 (output_bfd, (bfd_vma) 0, htab->elf.sgotplt->contents + 16);
|
||||||
|
+ bfd_put_64 (output_bfd, (bfd_vma) 0,
|
||||||
|
+ htab->elf.hgot->root.u.def.section->contents + 16);
|
||||||
|
}
|
||||||
|
-
|
||||||
|
elf_section_data (htab->elf.sgot->output_section)
|
||||||
|
->this_hdr.sh_entsize = 8;
|
||||||
|
}
|
||||||
|
diff -rup binutils.orig/bfd/elf-s390-common.c binutils-2.31.1/bfd/elf-s390-common.c
|
||||||
|
--- binutils.orig/bfd/elf-s390-common.c 2018-07-19 12:37:28.113029940 +0100
|
||||||
|
+++ binutils-2.31.1/bfd/elf-s390-common.c 2018-07-19 12:38:11.235548717 +0100
|
||||||
|
@@ -30,6 +30,87 @@ s390_is_ifunc_symbol_p (struct elf_link_
|
||||||
|
return h->type == STT_GNU_IFUNC || eh->ifunc_resolver_address != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Return true if .got.plt is supposed to be emitted after .got. */
|
||||||
|
+
|
||||||
|
+static inline bfd_boolean
|
||||||
|
+s390_gotplt_after_got_p (struct bfd_link_info *info)
|
||||||
|
+{
|
||||||
|
+ struct elf_s390_link_hash_table *htab = elf_s390_hash_table (info);
|
||||||
|
+
|
||||||
|
+ if (!htab->elf.sgot || !htab->elf.sgotplt)
|
||||||
|
+ return TRUE;
|
||||||
|
+
|
||||||
|
+ if (htab->elf.sgot->output_section == htab->elf.sgotplt->output_section)
|
||||||
|
+ {
|
||||||
|
+ if (htab->elf.sgot->output_offset < htab->elf.sgotplt->output_offset)
|
||||||
|
+ return TRUE;
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ if (htab->elf.sgot->output_section->vma
|
||||||
|
+ <= htab->elf.sgotplt->output_section->vma)
|
||||||
|
+ return TRUE;
|
||||||
|
+ }
|
||||||
|
+ return FALSE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/* Return the value of the _GLOBAL_OFFSET_TABLE_ symbol. */
|
||||||
|
+
|
||||||
|
+static inline bfd_vma
|
||||||
|
+s390_got_pointer (struct bfd_link_info *info)
|
||||||
|
+{
|
||||||
|
+ struct elf_s390_link_hash_table *htab = elf_s390_hash_table (info);
|
||||||
|
+ bfd_vma got_pointer;
|
||||||
|
+
|
||||||
|
+ BFD_ASSERT (htab && htab->elf.hgot);
|
||||||
|
+
|
||||||
|
+ got_pointer = (htab->elf.hgot->root.u.def.section->output_section->vma
|
||||||
|
+ + htab->elf.hgot->root.u.def.section->output_offset);
|
||||||
|
+ /* Our ABI requires the GOT pointer to point at the very beginning
|
||||||
|
+ of the global offset table. */
|
||||||
|
+ BFD_ASSERT (got_pointer
|
||||||
|
+ <= (htab->elf.sgot->output_section->vma
|
||||||
|
+ + htab->elf.sgot->output_offset));
|
||||||
|
+ BFD_ASSERT (got_pointer
|
||||||
|
+ <= (htab->elf.sgotplt->output_section->vma
|
||||||
|
+ + htab->elf.sgotplt->output_offset));
|
||||||
|
+
|
||||||
|
+ return got_pointer;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+/* Return the offset of the .got versus _GLOBAL_OFFSET_TABLE_. */
|
||||||
|
+
|
||||||
|
+static inline bfd_vma
|
||||||
|
+s390_got_offset (struct bfd_link_info *info)
|
||||||
|
+{
|
||||||
|
+ struct elf_s390_link_hash_table *htab = elf_s390_hash_table (info);
|
||||||
|
+
|
||||||
|
+ /* The absolute address of the .got in the target image. */
|
||||||
|
+ bfd_vma got_address = (htab->elf.sgot->output_section->vma
|
||||||
|
+ + htab->elf.sgot->output_offset);
|
||||||
|
+
|
||||||
|
+ /* GOT offset must not be negative. */
|
||||||
|
+ BFD_ASSERT (s390_got_pointer (info) <= got_address);
|
||||||
|
+ return got_address - s390_got_pointer (info);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/* Return the offset of the .got.plt versus _GLOBAL_OFFSET_TABLE_. */
|
||||||
|
+
|
||||||
|
+static inline bfd_vma
|
||||||
|
+s390_gotplt_offset (struct bfd_link_info *info)
|
||||||
|
+{
|
||||||
|
+ struct elf_s390_link_hash_table *htab = elf_s390_hash_table (info);
|
||||||
|
+
|
||||||
|
+ /* The absolute address of the .got.plt in the target image. */
|
||||||
|
+ bfd_vma gotplt_address = (htab->elf.sgotplt->output_section->vma
|
||||||
|
+ + htab->elf.sgotplt->output_offset);
|
||||||
|
+
|
||||||
|
+ /* GOT offset must not be negative. */
|
||||||
|
+ BFD_ASSERT (s390_got_pointer (info) <= gotplt_address);
|
||||||
|
+ return gotplt_address - s390_got_pointer (info);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Create sections needed by STT_GNU_IFUNC symbol. */
|
||||||
|
|
||||||
|
static bfd_boolean
|
||||||
|
diff -rup binutils.orig/ld/emulparams/elf64_s390.sh binutils-2.31.1/ld/emulparams/elf64_s390.sh
|
||||||
|
--- binutils.orig/ld/emulparams/elf64_s390.sh 2018-07-19 12:37:28.544025130 +0100
|
||||||
|
+++ binutils-2.31.1/ld/emulparams/elf64_s390.sh 2018-07-19 12:38:11.235548717 +0100
|
||||||
|
@@ -11,9 +11,12 @@ NOP=0x07070707
|
||||||
|
TEMPLATE_NAME=elf32
|
||||||
|
GENERATE_SHLIB_SCRIPT=yes
|
||||||
|
GENERATE_PIE_SCRIPT=yes
|
||||||
|
+GENERATE_RELRO_SCRIPT=yes
|
||||||
|
NO_SMALL_DATA=yes
|
||||||
|
EXTRA_EM_FILE=s390
|
||||||
|
IREL_IN_PLT=
|
||||||
|
+SEPARATE_GOTPLT=0
|
||||||
|
+test -z "$RELRO" && unset SEPARATE_GOTPLT
|
||||||
|
|
||||||
|
# Treat a host that matches the target with the possible exception of "x"
|
||||||
|
# in the name as if it were native.
|
||||||
|
diff -rup binutils.orig/ld/emultempl/elf32.em binutils-2.31.1/ld/emultempl/elf32.em
|
||||||
|
--- binutils.orig/ld/emultempl/elf32.em 2018-07-19 12:37:28.549025074 +0100
|
||||||
|
+++ binutils-2.31.1/ld/emultempl/elf32.em 2018-07-19 12:37:39.041907980 +0100
|
||||||
|
@@ -2376,17 +2376,41 @@ echo ' && link_info.combrelo
|
||||||
|
echo ' && link_info.relro' >> e${EMULATION_NAME}.c
|
||||||
|
echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
|
||||||
|
sed $sc ldscripts/${EMULATION_NAME}.xdw >> e${EMULATION_NAME}.c
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||||
|
+sed $sc ldscripts/${EMULATION_NAME}.xdceo >> e${EMULATION_NAME}.c
|
||||||
|
+fi
|
||||||
|
echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
|
||||||
|
echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
|
||||||
|
echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c
|
||||||
|
sed $sc ldscripts/${EMULATION_NAME}.xdce >> e${EMULATION_NAME}.c
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||||
|
+sed $sc ldscripts/${EMULATION_NAME}.xdco >> e${EMULATION_NAME}.c
|
||||||
|
+fi
|
||||||
|
echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
|
||||||
|
echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c
|
||||||
|
sed $sc ldscripts/${EMULATION_NAME}.xdc >> e${EMULATION_NAME}.c
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||||
|
+sed $sc ldscripts/${EMULATION_NAME}.xdeo >> e${EMULATION_NAME}.c
|
||||||
|
+fi
|
||||||
|
fi
|
||||||
|
echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
|
||||||
|
echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
|
||||||
|
sed $sc ldscripts/${EMULATION_NAME}.xde >> e${EMULATION_NAME}.c
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||||
|
+sed $sc ldscripts/${EMULATION_NAME}.xdo >> e${EMULATION_NAME}.c
|
||||||
|
+fi
|
||||||
|
echo ' ; else if (bfd_link_pie (&link_info)) return' >> e${EMULATION_NAME}.c
|
||||||
|
sed $sc ldscripts/${EMULATION_NAME}.xd >> e${EMULATION_NAME}.c
|
||||||
|
fi
|
||||||
|
@@ -2402,17 +2426,41 @@ echo ' && link_info.combrelo
|
||||||
|
echo ' && link_info.relro' >> e${EMULATION_NAME}.c
|
||||||
|
echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
|
||||||
|
sed $sc ldscripts/${EMULATION_NAME}.xsw >> e${EMULATION_NAME}.c
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||||
|
+sed $sc ldscripts/${EMULATION_NAME}.xsceo >> e${EMULATION_NAME}.c
|
||||||
|
+fi
|
||||||
|
echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
|
||||||
|
echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||||
|
echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
|
||||||
|
sed $sc ldscripts/${EMULATION_NAME}.xsce >> e${EMULATION_NAME}.c
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||||
|
+sed $sc ldscripts/${EMULATION_NAME}.xsco >> e${EMULATION_NAME}.c
|
||||||
|
+fi
|
||||||
|
echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
|
||||||
|
echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c
|
||||||
|
sed $sc ldscripts/${EMULATION_NAME}.xsc >> e${EMULATION_NAME}.c
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||||
|
+sed $sc ldscripts/${EMULATION_NAME}.xseo >> e${EMULATION_NAME}.c
|
||||||
|
+fi
|
||||||
|
fi
|
||||||
|
echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
|
||||||
|
echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
|
||||||
|
sed $sc ldscripts/${EMULATION_NAME}.xse >> e${EMULATION_NAME}.c
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||||
|
+sed $sc ldscripts/${EMULATION_NAME}.xso >> e${EMULATION_NAME}.c
|
||||||
|
+fi
|
||||||
|
echo ' ; else if (bfd_link_dll (&link_info)) return' >> e${EMULATION_NAME}.c
|
||||||
|
sed $sc ldscripts/${EMULATION_NAME}.xs >> e${EMULATION_NAME}.c
|
||||||
|
fi
|
||||||
|
@@ -2425,14 +2473,34 @@ echo ' ; else if (link_info.combreloc'
|
||||||
|
echo ' && link_info.relro' >> e${EMULATION_NAME}.c
|
||||||
|
echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
|
||||||
|
sed $sc ldscripts/${EMULATION_NAME}.xw >> e${EMULATION_NAME}.c
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||||
|
+sed $sc ldscripts/${EMULATION_NAME}.xceo >> e${EMULATION_NAME}.c
|
||||||
|
+fi
|
||||||
|
echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||||
|
echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
|
||||||
|
sed $sc ldscripts/${EMULATION_NAME}.xce >> e${EMULATION_NAME}.c
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||||
|
+sed $sc ldscripts/${EMULATION_NAME}.xco >> e${EMULATION_NAME}.c
|
||||||
|
+fi
|
||||||
|
echo ' ; else if (link_info.combreloc) return' >> e${EMULATION_NAME}.c
|
||||||
|
sed $sc ldscripts/${EMULATION_NAME}.xc >> e${EMULATION_NAME}.c
|
||||||
|
fi
|
||||||
|
-echo ' ; else if (link_info.separate_code) return' >> e${EMULATION_NAME}.c
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+echo ' ; else if (link_info.separate_code' >> e${EMULATION_NAME}.c
|
||||||
|
+echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||||
|
+sed $sc ldscripts/${EMULATION_NAME}.xeo >> e${EMULATION_NAME}.c
|
||||||
|
+fi
|
||||||
|
+echo ' ; else if (link_info.separate_code) return' >> e${EMULATION_NAME}.c
|
||||||
|
sed $sc ldscripts/${EMULATION_NAME}.xe >> e${EMULATION_NAME}.c
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+echo ' ; else if (link_info.relro) return' >> e${EMULATION_NAME}.c
|
||||||
|
+sed $sc ldscripts/${EMULATION_NAME}.xo >> e${EMULATION_NAME}.c
|
||||||
|
+fi
|
||||||
|
echo ' ; else return' >> e${EMULATION_NAME}.c
|
||||||
|
sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
|
||||||
|
echo '; }' >> e${EMULATION_NAME}.c
|
||||||
|
@@ -2471,6 +2539,21 @@ fragment <<EOF
|
||||||
|
else
|
||||||
|
return "ldscripts/${EMULATION_NAME}.xdw";
|
||||||
|
}
|
||||||
|
+EOF
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+fragment <<EOF
|
||||||
|
+ else if (bfd_link_pie (&link_info)
|
||||||
|
+ && link_info.combreloc
|
||||||
|
+ && link_info.relro)
|
||||||
|
+ {
|
||||||
|
+ if (link_info.separate_code)
|
||||||
|
+ return "ldscripts/${EMULATION_NAME}.xdceo";
|
||||||
|
+ else
|
||||||
|
+ return "ldscripts/${EMULATION_NAME}.xdco";
|
||||||
|
+ }
|
||||||
|
+EOF
|
||||||
|
+fi
|
||||||
|
+fragment <<EOF
|
||||||
|
else if (bfd_link_pie (&link_info)
|
||||||
|
&& link_info.combreloc)
|
||||||
|
{
|
||||||
|
@@ -2481,6 +2564,18 @@ fragment <<EOF
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+fragment <<EOF
|
||||||
|
+ else if (bfd_link_pie (&link_info)
|
||||||
|
+ && link_info.relro)
|
||||||
|
+ {
|
||||||
|
+ if (link_info.separate_code)
|
||||||
|
+ return "ldscripts/${EMULATION_NAME}.xdeo";
|
||||||
|
+ else
|
||||||
|
+ return "ldscripts/${EMULATION_NAME}.xdo";
|
||||||
|
+ }
|
||||||
|
+EOF
|
||||||
|
+fi
|
||||||
|
fragment <<EOF
|
||||||
|
else if (bfd_link_pie (&link_info))
|
||||||
|
{
|
||||||
|
@@ -2502,6 +2597,21 @@ fragment <<EOF
|
||||||
|
else
|
||||||
|
return "ldscripts/${EMULATION_NAME}.xsw";
|
||||||
|
}
|
||||||
|
+EOF
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+fragment <<EOF
|
||||||
|
+ else if (bfd_link_dll (&link_info)
|
||||||
|
+ && link_info.combreloc
|
||||||
|
+ && link_info.relro)
|
||||||
|
+ {
|
||||||
|
+ if (link_info.separate_code)
|
||||||
|
+ return "ldscripts/${EMULATION_NAME}.xsceo";
|
||||||
|
+ else
|
||||||
|
+ return "ldscripts/${EMULATION_NAME}.xsco";
|
||||||
|
+ }
|
||||||
|
+EOF
|
||||||
|
+fi
|
||||||
|
+fragment <<EOF
|
||||||
|
else if (bfd_link_dll (&link_info) && link_info.combreloc)
|
||||||
|
{
|
||||||
|
if (link_info.separate_code)
|
||||||
|
@@ -2511,6 +2621,18 @@ fragment <<EOF
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+fragment <<EOF
|
||||||
|
+ else if (bfd_link_dll (&link_info)
|
||||||
|
+ && link_info.relro)
|
||||||
|
+ {
|
||||||
|
+ if (link_info.separate_code)
|
||||||
|
+ return "ldscripts/${EMULATION_NAME}.xseo";
|
||||||
|
+ else
|
||||||
|
+ return "ldscripts/${EMULATION_NAME}.xso";
|
||||||
|
+ }
|
||||||
|
+EOF
|
||||||
|
+fi
|
||||||
|
fragment <<EOF
|
||||||
|
else if (bfd_link_dll (&link_info))
|
||||||
|
{
|
||||||
|
@@ -2531,6 +2653,20 @@ fragment <<EOF
|
||||||
|
else
|
||||||
|
return "ldscripts/${EMULATION_NAME}.xw";
|
||||||
|
}
|
||||||
|
+EOF
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+fragment <<EOF
|
||||||
|
+ else if (link_info.combreloc
|
||||||
|
+ && link_info.relro)
|
||||||
|
+ {
|
||||||
|
+ if (link_info.separate_code)
|
||||||
|
+ return "ldscripts/${EMULATION_NAME}.xceo";
|
||||||
|
+ else
|
||||||
|
+ return "ldscripts/${EMULATION_NAME}.xco";
|
||||||
|
+ }
|
||||||
|
+EOF
|
||||||
|
+fi
|
||||||
|
+fragment <<EOF
|
||||||
|
else if (link_info.combreloc)
|
||||||
|
{
|
||||||
|
if (link_info.separate_code)
|
||||||
|
@@ -2540,6 +2676,17 @@ fragment <<EOF
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT" ; then
|
||||||
|
+fragment <<EOF
|
||||||
|
+ else if (link_info.relro)
|
||||||
|
+ {
|
||||||
|
+ if (link_info.separate_code)
|
||||||
|
+ return "ldscripts/${EMULATION_NAME}.xeo";
|
||||||
|
+ else
|
||||||
|
+ return "ldscripts/${EMULATION_NAME}.xo";
|
||||||
|
+ }
|
||||||
|
+EOF
|
||||||
|
+fi
|
||||||
|
fragment <<EOF
|
||||||
|
else
|
||||||
|
{
|
||||||
|
diff -rup binutils.orig/ld/genscripts.sh binutils-2.31.1/ld/genscripts.sh
|
||||||
|
--- binutils.orig/ld/genscripts.sh 2018-07-19 12:37:28.540025175 +0100
|
||||||
|
+++ binutils-2.31.1/ld/genscripts.sh 2018-07-19 12:37:39.041907980 +0100
|
||||||
|
@@ -306,6 +306,20 @@ LD_FLAG=textonly
|
||||||
|
. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xe
|
||||||
|
|
||||||
|
+if test -n "$GENERATE_RELRO_SCRIPT"; then
|
||||||
|
+ LD_FLAG=
|
||||||
|
+ RELRO=" "
|
||||||
|
+ ( echo "/* Script for -z relo: generate normal executables with separate code segment */"
|
||||||
|
+ . ${CUSTOMIZER_SCRIPT}
|
||||||
|
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xo
|
||||||
|
+ LD_FLAG=textonly
|
||||||
|
+ ( echo "/* Script for -z separate-code -z relo: generate normal executables with separate code segment */"
|
||||||
|
+ . ${CUSTOMIZER_SCRIPT}
|
||||||
|
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xeo
|
||||||
|
+ unset RELRO
|
||||||
|
+fi
|
||||||
|
LD_FLAG=n
|
||||||
|
DATA_ALIGNMENT=${DATA_ALIGNMENT_n}
|
||||||
|
( echo "/* Script for -n: mix text and data on same page */"
|
||||||
|
@@ -353,6 +367,25 @@ if test -n "$GENERATE_COMBRELOC_SCRIPT";
|
||||||
|
rm -f ${COMBRELOC}
|
||||||
|
COMBRELOC=
|
||||||
|
unset RELRO_NOW
|
||||||
|
+ if test -n "$GENERATE_RELRO_SCRIPT"; then
|
||||||
|
+ LD_FLAG=c
|
||||||
|
+ RELRO=" "
|
||||||
|
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xco.tmp
|
||||||
|
+ ( echo "/* Script for -z combreloc -z relro: combine and sort reloc sections */"
|
||||||
|
+ . ${CUSTOMIZER_SCRIPT}
|
||||||
|
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xco
|
||||||
|
+ rm -f ${COMBRELOC}
|
||||||
|
+ LD_FLAG=ctextonly
|
||||||
|
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xceo.tmp
|
||||||
|
+ ( echo "/* Script for -z combreloc -z separate-code -z relro: combine and sort reloc sections */"
|
||||||
|
+ . ${CUSTOMIZER_SCRIPT}
|
||||||
|
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xceo
|
||||||
|
+ rm -f ${COMBRELOC}
|
||||||
|
+ COMBRELOC=
|
||||||
|
+ unset RELRO
|
||||||
|
+ fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -n "$GENERATE_SHLIB_SCRIPT"; then
|
||||||
|
@@ -370,6 +403,23 @@ if test -n "$GENERATE_SHLIB_SCRIPT"; the
|
||||||
|
. ${CUSTOMIZER_SCRIPT}
|
||||||
|
. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xse
|
||||||
|
+
|
||||||
|
+ if test -n "$GENERATE_RELRO_SCRIPT"; then
|
||||||
|
+ RELRO=" "
|
||||||
|
+ LD_FLAG=shared
|
||||||
|
+ (
|
||||||
|
+ echo "/* Script for ld --shared -z relro: link shared library */"
|
||||||
|
+ . ${CUSTOMIZER_SCRIPT}
|
||||||
|
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xso
|
||||||
|
+ LD_FLAG=sharedtextonly
|
||||||
|
+ (
|
||||||
|
+ echo "/* Script for ld --shared -z relro -z separate-code: link shared library with separate code segment */"
|
||||||
|
+ . ${CUSTOMIZER_SCRIPT}
|
||||||
|
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xseo
|
||||||
|
+ unset RELRO
|
||||||
|
+ fi
|
||||||
|
if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
|
||||||
|
DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}}
|
||||||
|
LD_FLAG=cshared
|
||||||
|
@@ -401,8 +451,27 @@ if test -n "$GENERATE_SHLIB_SCRIPT"; the
|
||||||
|
. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xswe
|
||||||
|
rm -f ${COMBRELOC}
|
||||||
|
- COMBRELOC=
|
||||||
|
unset RELRO_NOW
|
||||||
|
+
|
||||||
|
+ if test -n "$GENERATE_RELRO_SCRIPT"; then
|
||||||
|
+ LD_FLAG=wshared
|
||||||
|
+ RELRO=" "
|
||||||
|
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xsco.tmp
|
||||||
|
+ ( echo "/* Script for --shared -z combreloc -z relro: shared library, combine & sort relocs with separate code segment */"
|
||||||
|
+ . ${CUSTOMIZER_SCRIPT}
|
||||||
|
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsco
|
||||||
|
+ rm -f ${COMBRELOC}
|
||||||
|
+ LD_FLAG=wsharedtextonly
|
||||||
|
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xsceo.tmp
|
||||||
|
+ ( echo "/* Script for --shared -z combreloc -z relro -z separate-code: shared library, combine & sort relocs with separate code segment */"
|
||||||
|
+ . ${CUSTOMIZER_SCRIPT}
|
||||||
|
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsceo
|
||||||
|
+ rm -f ${COMBRELOC}
|
||||||
|
+ unset RELRO
|
||||||
|
+ fi
|
||||||
|
+ COMBRELOC=
|
||||||
|
fi
|
||||||
|
unset CREATE_SHLIB
|
||||||
|
fi
|
||||||
|
@@ -422,6 +491,22 @@ if test -n "$GENERATE_PIE_SCRIPT"; then
|
||||||
|
. ${CUSTOMIZER_SCRIPT}
|
||||||
|
. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xde
|
||||||
|
+ if test -n "$GENERATE_RELRO_SCRIPT"; then
|
||||||
|
+ RELRO=" "
|
||||||
|
+ LD_FLAG=pie
|
||||||
|
+ (
|
||||||
|
+ echo "/* Script for ld -pie -z relro: link position independent executable */"
|
||||||
|
+ . ${CUSTOMIZER_SCRIPT}
|
||||||
|
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdo
|
||||||
|
+ LD_FLAG=pietextonly
|
||||||
|
+ (
|
||||||
|
+ echo "/* Script for ld -pie -z relro -z separate-code: link position independent executable with separate code segment */"
|
||||||
|
+ . ${CUSTOMIZER_SCRIPT}
|
||||||
|
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdeo
|
||||||
|
+ unset RELRO
|
||||||
|
+ fi
|
||||||
|
if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
|
||||||
|
DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}}
|
||||||
|
COMBRELOC=ldscripts/${EMULATION_NAME}.xdc.tmp
|
||||||
|
@@ -453,8 +538,28 @@ if test -n "$GENERATE_PIE_SCRIPT"; then
|
||||||
|
. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdwe
|
||||||
|
rm -f ${COMBRELOC}
|
||||||
|
- COMBRELOC=
|
||||||
|
unset RELRO_NOW
|
||||||
|
+
|
||||||
|
+ if test -n "$GENERATE_RELRO_SCRIPT"; then
|
||||||
|
+ LD_FLAG=wpie
|
||||||
|
+ RELRO=" "
|
||||||
|
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xdco.tmp
|
||||||
|
+ ( echo "/* Script for -pie -z combreloc -z relro: position independent executable, combine & sort relocs with separate code segment */"
|
||||||
|
+ . ${CUSTOMIZER_SCRIPT}
|
||||||
|
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdco
|
||||||
|
+ rm -f ${COMBRELOC}
|
||||||
|
+ LD_FLAG=wpietextonly
|
||||||
|
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xdceo.tmp
|
||||||
|
+ ( echo "/* Script for -pie -z combreloc -z relro -z separate-code: position independent executable, combine & sort relocs with separate code segment */"
|
||||||
|
+ . ${CUSTOMIZER_SCRIPT}
|
||||||
|
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
|
||||||
|
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdceo
|
||||||
|
+ rm -f ${COMBRELOC}
|
||||||
|
+
|
||||||
|
+ unset RELRO
|
||||||
|
+ fi
|
||||||
|
+ COMBRELOC=
|
||||||
|
fi
|
||||||
|
unset CREATE_PIE
|
||||||
|
fi
|
||||||
|
Only in binutils.orig/ld/testsuite/ld-s390: gotreloc_64-1.dd
|
||||||
|
Only in binutils-2.31.1/ld/testsuite/ld-s390: gotreloc_64-norelro-1.dd
|
||||||
|
Only in binutils-2.31.1/ld/testsuite/ld-s390: gotreloc_64-relro-1.dd
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-s390/s390.exp binutils-2.31.1/ld/testsuite/ld-s390/s390.exp
|
||||||
|
--- binutils.orig/ld/testsuite/ld-s390/s390.exp 2018-07-19 12:37:28.498025644 +0100
|
||||||
|
+++ binutils-2.31.1/ld/testsuite/ld-s390/s390.exp 2018-07-19 12:38:11.236548705 +0100
|
||||||
|
@@ -70,10 +70,15 @@ set s390xtests {
|
||||||
|
{{readelf -WSsrl tlsbin_64.rd} {objdump -dzrj.text tlsbin_64.dd}
|
||||||
|
{objdump -sj.got tlsbin_64.sd} {objdump -sj.tdata tlsbin_64.td}}
|
||||||
|
"tlsbin_64"}
|
||||||
|
- {"GOT: symbol address load from got to larl"
|
||||||
|
- "-shared -melf64_s390 --hash-style=sysv --version-script=gotreloc-1.ver" ""
|
||||||
|
+ {"GOT: norelro symbol address load from got to larl"
|
||||||
|
+ "-shared -melf64_s390 -z norelro --hash-style=sysv --version-script=gotreloc-1.ver" ""
|
||||||
|
"-m64" {gotreloc-1.s}
|
||||||
|
- {{objdump -dzrj.text gotreloc_64-1.dd}}
|
||||||
|
+ {{objdump -dzrj.text gotreloc_64-norelro-1.dd}}
|
||||||
|
+ "gotreloc_64-1"}
|
||||||
|
+ {"GOT: relro symbol address load from got to larl"
|
||||||
|
+ "-shared -melf64_s390 -z relro --hash-style=sysv --version-script=gotreloc-1.ver" ""
|
||||||
|
+ "-m64" {gotreloc-1.s}
|
||||||
|
+ {{objdump -dzrj.text gotreloc_64-relro-1.dd}}
|
||||||
|
"gotreloc_64-1"}
|
||||||
|
{"PLT: offset test"
|
||||||
|
"-shared -m elf64_s390 -dT pltoffset-1.ld" ""
|
||||||
318
binutils.spec
Normal file
318
binutils.spec
Normal file
@ -0,0 +1,318 @@
|
|||||||
|
Summary: Binary utilities
|
||||||
|
Name: binutils
|
||||||
|
Version: 2.31.1
|
||||||
|
Release: 15
|
||||||
|
License: GPLv3+
|
||||||
|
URL: https://sourceware.org/binutils
|
||||||
|
|
||||||
|
Source: https://ftp.gnu.org/gnu/binutils/binutils-%{version}.tar.xz
|
||||||
|
Source2: binutils-2.19.50.0.1-output-format.sed
|
||||||
|
|
||||||
|
#RHEL-UPSTREAM
|
||||||
|
Patch01: binutils-2.20.51.0.2-libtool-lib64.patch
|
||||||
|
Patch02: binutils-2.25-version.patch
|
||||||
|
Patch03: binutils-2.31-export-demangle.h.patch
|
||||||
|
#BUZ:845084
|
||||||
|
Patch04: binutils-2.22.52.0.4-no-config-h-check.patch
|
||||||
|
Patch05: binutils-2.29-filename-in-error-messages.patch
|
||||||
|
#BUG:1452111 && 1333481
|
||||||
|
Patch06: binutils-2.29-revert-PLT-elision.patch
|
||||||
|
Patch07: binutils-readelf-other-sym-info.patch
|
||||||
|
Patch08: binutils-2.27-aarch64-ifunc.patch
|
||||||
|
Patch09: binutils-fix-testsuite-failures.patch
|
||||||
|
Patch10: binutils-clear-version-info.patch
|
||||||
|
Patch11: binutils-gold-ignore-discarded-note-relocs.patch
|
||||||
|
Patch12: binutils-s390-partial-relro.patch
|
||||||
|
Patch13: binutils-merge-attribute-sections.patch
|
||||||
|
Patch14: binutils-note-merge-improvements.patch
|
||||||
|
Patch15: binutils-detect-corrupt-sym-version-info.patch
|
||||||
|
Patch16: binutils-delay-ld-script-constant-eval.patch
|
||||||
|
|
||||||
|
#PATCH-CVE-UPSTREAM
|
||||||
|
Patch6000: CVE-2018-19931.patch
|
||||||
|
Patch6001: CVE-2018-19932.patch
|
||||||
|
Patch6002: CVE-2019-9077.patch
|
||||||
|
Patch6003: binutils-CVE-2018-17358.patch
|
||||||
|
Patch6004: binutils-CVE-2018-17360.patch
|
||||||
|
Patch6005: binutils-CVE-2018-20623.patch
|
||||||
|
Patch6006: binutils-CVE-2018-20651.patch
|
||||||
|
Patch6007: CVE-2019-9075.patch
|
||||||
|
Patch6008: CVE-2018-12697.patch
|
||||||
|
Patch6009: binutils-CVE-2019-1010204.patch
|
||||||
|
|
||||||
|
Provides: bundled(libiberty)
|
||||||
|
|
||||||
|
Buildroot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
|
||||||
|
|
||||||
|
BuildRequires: gcc, perl, sed, coreutils, dejagnu, zlib-devel, glibc-static, sharutils, bc, libstdc++-static
|
||||||
|
BuildRequires: bison, m4, gcc-c++, gettext, flex, zlib-devel, texinfo >= 4.0, perl-podlators
|
||||||
|
Requires: info, coreutils, chkconfig
|
||||||
|
|
||||||
|
%define _gnu %{nil}
|
||||||
|
# The higher of these two numbers determines the default ld.
|
||||||
|
%{!?ld_bfd_priority: %global ld_bfd_priority 50}
|
||||||
|
%{!?ld_gold_priority:%global ld_gold_priority 30}
|
||||||
|
|
||||||
|
|
||||||
|
%description
|
||||||
|
The GNU Binutils are a collection of binary tools. The main ones are:
|
||||||
|
ld - the GNU linker.
|
||||||
|
as - the GNU assembler.
|
||||||
|
addr2line - Converts addresses into filenames and line numbers.
|
||||||
|
ar - A utility for creating, modifying and extracting from archives.
|
||||||
|
c++filt - Filter to demangle encoded C++ symbols.
|
||||||
|
dlltool - Creates files for building and using DLLs.
|
||||||
|
gold - A new, faster, ELF only linker, still in beta test.
|
||||||
|
gprof - Displays profiling information.
|
||||||
|
nlmconv - Converts object code into an NLM.
|
||||||
|
nm - Lists symbols from object files.
|
||||||
|
objcopy - Copies and translates object files.
|
||||||
|
objdump - Displays information from object files.
|
||||||
|
ranlib - Generates an index to the contents of an archive.
|
||||||
|
readelf - Displays information from any ELF format object file.
|
||||||
|
size - Lists the section sizes of an object or archive file.
|
||||||
|
strings - Lists printable strings from files.
|
||||||
|
trip - Discards symbols.
|
||||||
|
windmc - A Windows compatible message compiler.
|
||||||
|
windres - A compiler for Windows resource files.
|
||||||
|
|
||||||
|
|
||||||
|
%package devel
|
||||||
|
Summary: devel package including header files and libraries.
|
||||||
|
Provides: binutils-static = %{version}-%{release}
|
||||||
|
Requires: info, zlib-devel, binutils = %{version}-%{release}, coreutils
|
||||||
|
|
||||||
|
%description devel
|
||||||
|
The devel package contains BFD and opcodes static and dynamic libraries.
|
||||||
|
The static libraries are used by the dynamic libraries which are linkier
|
||||||
|
scripts imported from glibc/Makerules.
|
||||||
|
|
||||||
|
%package help
|
||||||
|
Summary: binutils help
|
||||||
|
|
||||||
|
%description help
|
||||||
|
The help package contains man files.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%autosetup -n %{name}-%{version} -p1
|
||||||
|
|
||||||
|
|
||||||
|
sed -i -e 's/%''{release}/%{release}/g' bfd/Makefile{.am,.in}
|
||||||
|
sed -i -e '/^libopcodes_la_\(DEPENDENCIES\|LIBADD\)/s,$, ../bfd/libbfd.la,' opcodes/Makefile.{am,in}
|
||||||
|
perl -pi -e 's/i\[3-7\]86/i[34567]86/g' */conf*
|
||||||
|
|
||||||
|
sed -i -e '/pagesize/s/0x1000,/0x10000,/' gold/aarch64.cc
|
||||||
|
sed -i -e '/#define.*ELF_COMMONPAGESIZE/s/0x1000$/0x10000/' bfd/elf*aarch64.c
|
||||||
|
|
||||||
|
sed -i -e 's/^ PACKAGE=/ PACKAGE=/' */configure
|
||||||
|
# revert name change when testing.
|
||||||
|
sed -i -e "2aDEJATOOL = binutils" binutils/Makefile.am
|
||||||
|
sed -i -e "2aDEJATOOL = gas" gas/Makefile.am
|
||||||
|
sed -i -e "2aDEJATOOL = ld" ld/Makefile.am
|
||||||
|
sed -i -e "s/^DEJATOOL = .*/DEJATOOL = binutils/" binutils/Makefile.in
|
||||||
|
sed -i -e "s/^DEJATOOL = .*/DEJATOOL = gas/" gas/Makefile.in
|
||||||
|
sed -i -e "s/^DEJATOOL = .*/DEJATOOL = ld/" ld/Makefile.in
|
||||||
|
|
||||||
|
touch */configure
|
||||||
|
|
||||||
|
%build
|
||||||
|
CARGS=
|
||||||
|
case %{_target_platform} in i?86*|arm*|aarch64*)
|
||||||
|
CARGS="$CARGS --enable-64-bit-bfd"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case %{_target_platform} in x86_64*|i?86*|aarch64*)
|
||||||
|
CARGS="$CARGS --enable-targets=x86_64-pep --enable-relro=yes"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
export CFLAGS="$RPM_OPT_FLAGS"
|
||||||
|
export LDFLAGS=$RPM_LD_FLAGS
|
||||||
|
|
||||||
|
%configure \
|
||||||
|
--quiet \
|
||||||
|
--build=%{_target_platform} --host=%{_target_platform} \
|
||||||
|
--target=%{_target_platform} \
|
||||||
|
--enable-gold=default --enable-ld \
|
||||||
|
--with-sysroot=/ \
|
||||||
|
--enable-shared \
|
||||||
|
--enable-deterministic-archives=no \
|
||||||
|
--enable-lto \
|
||||||
|
--enable-compressed-debug-sections=none \
|
||||||
|
--enable-generate-build-notes=no \
|
||||||
|
$CARGS \
|
||||||
|
--enable-plugins \
|
||||||
|
|
||||||
|
%make_build %{_smp_mflags} tooldir=%{_prefix} all
|
||||||
|
%make_build %{_smp_mflags} tooldir=%{_prefix} info
|
||||||
|
|
||||||
|
make -k check < /dev/null || :
|
||||||
|
cat {gas/testsuite/gas,ld/ld,binutils/binutils}.sum
|
||||||
|
for file in {gas/testsuite/gas,ld/ld,binutils/binutils}.{sum,log}
|
||||||
|
do
|
||||||
|
ln $file binutils-%{_target_platform}-$(basename $file) || :
|
||||||
|
done
|
||||||
|
tar cjf binutils-%{_target_platform}.tar.bz2 binutils-%{_target_platform}-*.{sum,log}
|
||||||
|
uuencode binutils-%{_target_platform}.tar.bz2 binutils-%{_target_platform}.tar.bz2
|
||||||
|
rm -f binutils-%{_target_platform}.tar.bz2 binutils-%{_target_platform}-*.{sum,log}
|
||||||
|
|
||||||
|
%install
|
||||||
|
%make_install DESTDIR=%{buildroot}
|
||||||
|
|
||||||
|
make prefix=%{buildroot}%{_prefix} infodir=%{buildroot}%{_infodir} install-info
|
||||||
|
|
||||||
|
# Rebuild static libraries with -g -fPIC.
|
||||||
|
for library in libiberty opcodes
|
||||||
|
do
|
||||||
|
%make_build -C $library clean
|
||||||
|
%make_build CFLAGS="-g -fPIC $RPM_OPT_FLAGS" -C $library
|
||||||
|
done
|
||||||
|
%make_build -C bfd clean
|
||||||
|
%make_build CFLAGS="-g -fPIC $RPM_OPT_FLAGS -fvisibility=hidden" -C bfd
|
||||||
|
|
||||||
|
|
||||||
|
for library in bfd/libbfd.a libiberty/libiberty.a opcodes/libopcodes.a
|
||||||
|
do
|
||||||
|
install -m 644 $library %{buildroot}%{_libdir}
|
||||||
|
done
|
||||||
|
|
||||||
|
install -m 644 include/libiberty.h %{buildroot}%{_prefix}/include
|
||||||
|
chmod +x %{buildroot}%{_libdir}/lib*.so*
|
||||||
|
|
||||||
|
# Do not use .so&&.la of libbfd and libopcodes which are not stable
|
||||||
|
rm -f %{buildroot}%{_libdir}/lib{bfd,opcodes}.{so,la}
|
||||||
|
|
||||||
|
%ifarch %{ix86} x86_64 arm
|
||||||
|
sed -i -e '/^#include "ansidecl.h"/{p;s~^.*$~#include <bits/wordsize.h>~;}' \
|
||||||
|
-e 's/^#define BFD_DEFAULT_TARGET_SIZE \(32\|64\) *$/#define BFD_DEFAULT_TARGET_SIZE __WORDSIZE/' \
|
||||||
|
-e 's/^#define BFD_HOST_64BIT_LONG [01] *$/#define BFD_HOST_64BIT_LONG (__WORDSIZE == 64)/' \
|
||||||
|
-e 's/^#define BFD_HOST_64_BIT \(long \)\?long *$/#if __WORDSIZE == 32\
|
||||||
|
#define BFD_HOST_64_BIT long long\
|
||||||
|
#else\
|
||||||
|
#define BFD_HOST_64_BIT long\
|
||||||
|
#endif/' \
|
||||||
|
-e 's/^#define BFD_HOST_U_64_BIT unsigned \(long \)\?long *$/#define BFD_HOST_U_64_BIT unsigned BFD_HOST_64_BIT/' \
|
||||||
|
%{buildroot}%{_prefix}/include/bfd.h
|
||||||
|
%endif
|
||||||
|
touch -r bfd/bfd-in2.h %{buildroot}%{_prefix}/include/bfd.h
|
||||||
|
|
||||||
|
# Generate linker script which is referenced to glibc/Makerules:
|
||||||
|
|
||||||
|
OUTPUT_FORMAT="\
|
||||||
|
$(gcc $CFLAGS $LDFLAGS -shared -x c /dev/null -o /dev/null -Wl,--verbose -v 2>&1 | sed -n -f "%{SOURCE2}")"
|
||||||
|
|
||||||
|
tee %{buildroot}%{_libdir}/libbfd.so <<EOH
|
||||||
|
/* GNU ld script */
|
||||||
|
|
||||||
|
$OUTPUT_FORMAT
|
||||||
|
|
||||||
|
INPUT ( %{_libdir}/libbfd.a -liberty -lz -ldl )
|
||||||
|
EOH
|
||||||
|
|
||||||
|
tee %{buildroot}%{_libdir}/libopcodes.so <<EOH
|
||||||
|
/* GNU ld script */
|
||||||
|
|
||||||
|
$OUTPUT_FORMAT
|
||||||
|
|
||||||
|
INPUT ( %{_libdir}/libopcodes.a -lbfd )
|
||||||
|
EOH
|
||||||
|
|
||||||
|
|
||||||
|
rm -f %{buildroot}%{_infodir}/dir
|
||||||
|
rm -rf %{buildroot}%{_prefix}/%{_target_platform}
|
||||||
|
|
||||||
|
%find_lang binutils
|
||||||
|
for library in opcodes bfd gas gprof ld gold
|
||||||
|
do
|
||||||
|
%find_lang $library
|
||||||
|
cat $library.lang >> binutils.lang
|
||||||
|
done
|
||||||
|
|
||||||
|
%post
|
||||||
|
%__rm -f %{_bindir}/ld
|
||||||
|
%{_sbindir}/alternatives --install %{_bindir}/ld ld \
|
||||||
|
%{_bindir}/ld.bfd %{ld_bfd_priority}
|
||||||
|
%{_sbindir}/alternatives --install %{_bindir}/ld ld \
|
||||||
|
%{_bindir}/ld.gold %{ld_gold_priority}
|
||||||
|
if [ $1 = 0 ]; then
|
||||||
|
%{_sbindir}/alternatives --auto ld
|
||||||
|
fi
|
||||||
|
|
||||||
|
/sbin/ldconfig
|
||||||
|
|
||||||
|
%post help
|
||||||
|
for info in as.info.gz binutils.info.gz gprof.info.gz ld.info.gz
|
||||||
|
do
|
||||||
|
/sbin/install-info --info-dir=%{_infodir} %{_infodir}/$info
|
||||||
|
done
|
||||||
|
|
||||||
|
%preun
|
||||||
|
if [ $1 = 0 ]; then
|
||||||
|
%{_sbindir}/alternatives --remove ld %{_bindir}/ld.bfd
|
||||||
|
%{_sbindir}/alternatives --remove ld %{_bindir}/ld.gold
|
||||||
|
fi
|
||||||
|
|
||||||
|
%preun help
|
||||||
|
if [ $1 = 0 ]; then
|
||||||
|
if [ -e %{_infodir}/binutils.info.gz ]
|
||||||
|
then
|
||||||
|
for info in as.info.gz binutils.info.gz gprof.info.gz ld.info.gz
|
||||||
|
do
|
||||||
|
/sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/$info
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
%postun
|
||||||
|
/sbin/ldconfig
|
||||||
|
|
||||||
|
%postun help
|
||||||
|
if [ -e %{_infodir}/binutils.info.gz ]
|
||||||
|
then
|
||||||
|
for info in as.info.gz binutils.info.gz gprof.info.gz ld.info.gz
|
||||||
|
do
|
||||||
|
/sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/$info
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
%files -f binutils.lang
|
||||||
|
%doc README
|
||||||
|
%license COPYING3 COPYING COPYING3.LIB COPYING.LIB
|
||||||
|
%{_bindir}/[!l]*
|
||||||
|
|
||||||
|
%{_bindir}/ld.*
|
||||||
|
%ghost %{_bindir}/ld
|
||||||
|
|
||||||
|
%{_libdir}/lib*.so
|
||||||
|
%exclude %{_libdir}/libbfd.so
|
||||||
|
%exclude %{_libdir}/libopcodes.so
|
||||||
|
|
||||||
|
%files devel
|
||||||
|
%{_prefix}/include/*
|
||||||
|
%{_libdir}/lib*.a
|
||||||
|
%{_libdir}/libbfd.so
|
||||||
|
%{_libdir}/libopcodes.so
|
||||||
|
|
||||||
|
%files help
|
||||||
|
%{_mandir}/man1/*
|
||||||
|
%{_infodir}/as.info.gz
|
||||||
|
%{_infodir}/binutils.info.gz
|
||||||
|
%{_infodir}/gprof.info.gz
|
||||||
|
%{_infodir}/ld.info.gz
|
||||||
|
%{_infodir}/[^b]*info*
|
||||||
|
%{_infodir}/binutils*info*
|
||||||
|
%{_infodir}/bfd*info*
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Mon Sep 23 2019 luhuaxin <luhuaxin@huawei.com> - 2.31.1-15
|
||||||
|
- Patch synchronization and update dependency name
|
||||||
|
- Type:cves
|
||||||
|
- ID:CVE-2019-1010204
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix CVE-2019-1010204
|
||||||
|
|
||||||
|
* Wed Sep 04 2019 openEuler Buildteam <buildteam@openeuler.org> - 2.31.1-14
|
||||||
|
- Package init
|
||||||
Loading…
x
Reference in New Issue
Block a user