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