0.159-5 aarch64-bool-ret, elf.h update and ppc64le-elfv2-abi patch.
Resolves: #1110249
This commit is contained in:
parent
1648a11415
commit
16224b3d32
23
elfutils-0.159-aarch64-bool-ret.patch
Normal file
23
elfutils-0.159-aarch64-bool-ret.patch
Normal file
@ -0,0 +1,23 @@
|
||||
commit 5e9668ccaf3d34567b313b13327ff9b31e4e5ba6
|
||||
Author: Mark Wielaard <mjw@redhat.com>
|
||||
Date: Fri Jul 4 13:26:12 2014 +0200
|
||||
|
||||
backends: aarch64_return_value_location should handle DW_ATE_boolean.
|
||||
|
||||
Found with run-native-test.sh om debian arm64.
|
||||
http://bugs.debian.org/753552
|
||||
|
||||
Signed-off-by: Mark Wielaard <mjw@redhat.com>
|
||||
|
||||
diff --git a/backends/aarch64_retval.c b/backends/aarch64_retval.c
|
||||
index 0ed7d56..68de307 100644
|
||||
--- a/backends/aarch64_retval.c
|
||||
+++ b/backends/aarch64_retval.c
|
||||
@@ -357,6 +357,7 @@ aarch64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp)
|
||||
size of the argument is less than or equal to 8 bytes
|
||||
[...] the argument is copied to the least significant
|
||||
bits in x[NGRN]. */
|
||||
+ case DW_ATE_boolean:
|
||||
case DW_ATE_signed:
|
||||
case DW_ATE_unsigned:
|
||||
case DW_ATE_unsigned_char:
|
70
elfutils-0.159-elf-h.patch
Normal file
70
elfutils-0.159-elf-h.patch
Normal file
@ -0,0 +1,70 @@
|
||||
commit 16e2d351bf31d0ce09ce9632ff196cbd973b656b
|
||||
Author: Mark Wielaard <mjw@redhat.com>
|
||||
Date: Fri Jul 4 13:39:18 2014 +0200
|
||||
|
||||
Update elf.h from glibc.
|
||||
|
||||
Includes new bits needed for ppc64le ELFv2 abi.
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1110249
|
||||
|
||||
Signed-off-by: Mark Wielaard <mjw@redhat.com>
|
||||
|
||||
diff --git a/libelf/elf.h b/libelf/elf.h
|
||||
index a05ea3b..40e87b2 100644
|
||||
--- a/libelf/elf.h
|
||||
+++ b/libelf/elf.h
|
||||
@@ -1,5 +1,5 @@
|
||||
/* This file defines standard ELF types, structures, and macros.
|
||||
- Copyright (C) 1995-2013 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 1995-2014 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@@ -2252,6 +2252,17 @@ typedef Elf32_Addr Elf32_Conflict;
|
||||
#define R_PPC64_DTPREL16_HIGHERA 104 /* half16 (sym+add)@dtprel@highera */
|
||||
#define R_PPC64_DTPREL16_HIGHEST 105 /* half16 (sym+add)@dtprel@highest */
|
||||
#define R_PPC64_DTPREL16_HIGHESTA 106 /* half16 (sym+add)@dtprel@highesta */
|
||||
+#define R_PPC64_TLSGD 107 /* none (sym+add)@tlsgd */
|
||||
+#define R_PPC64_TLSLD 108 /* none (sym+add)@tlsld */
|
||||
+#define R_PPC64_TOCSAVE 109 /* none */
|
||||
+
|
||||
+/* Added when HA and HI relocs were changed to report overflows. */
|
||||
+#define R_PPC64_ADDR16_HIGH 110
|
||||
+#define R_PPC64_ADDR16_HIGHA 111
|
||||
+#define R_PPC64_TPREL16_HIGH 112
|
||||
+#define R_PPC64_TPREL16_HIGHA 113
|
||||
+#define R_PPC64_DTPREL16_HIGH 114
|
||||
+#define R_PPC64_DTPREL16_HIGHA 115
|
||||
|
||||
/* GNU extension to support local ifunc. */
|
||||
#define R_PPC64_JMP_IREL 247
|
||||
@@ -2261,12 +2272,29 @@ typedef Elf32_Addr Elf32_Conflict;
|
||||
#define R_PPC64_REL16_HI 251 /* half16 (sym+add-.)@h */
|
||||
#define R_PPC64_REL16_HA 252 /* half16 (sym+add-.)@ha */
|
||||
|
||||
+/* e_flags bits specifying ABI.
|
||||
+ 1 for original function descriptor using ABI,
|
||||
+ 2 for revised ABI without function descriptors,
|
||||
+ 0 for unspecified or not using any features affected by the differences. */
|
||||
+#define EF_PPC64_ABI 3
|
||||
+
|
||||
/* PowerPC64 specific values for the Dyn d_tag field. */
|
||||
#define DT_PPC64_GLINK (DT_LOPROC + 0)
|
||||
#define DT_PPC64_OPD (DT_LOPROC + 1)
|
||||
#define DT_PPC64_OPDSZ (DT_LOPROC + 2)
|
||||
+#define DT_PPC64_OPT (DT_LOPROC + 3)
|
||||
#define DT_PPC64_NUM 3
|
||||
|
||||
+/* PowerPC64 specific values for the DT_PPC64_OPT Dyn entry. */
|
||||
+#define PPC64_OPT_TLS 1
|
||||
+#define PPC64_OPT_MULTI_TOC 2
|
||||
+
|
||||
+/* PowerPC64 specific values for the Elf64_Sym st_other field. */
|
||||
+#define STO_PPC64_LOCAL_BIT 5
|
||||
+#define STO_PPC64_LOCAL_MASK (7 << STO_PPC64_LOCAL_BIT)
|
||||
+#define PPC64_LOCAL_ENTRY_OFFSET(other) \
|
||||
+ (((1 << (((other) & STO_PPC64_LOCAL_MASK) >> STO_PPC64_LOCAL_BIT)) >> 2) << 2)
|
||||
+
|
||||
|
||||
/* ARM specific declarations */
|
||||
|
99
elfutils-0.159-ppc64le-elfv2-abi.patch
Normal file
99
elfutils-0.159-ppc64le-elfv2-abi.patch
Normal file
@ -0,0 +1,99 @@
|
||||
commit a95c4ad24cf83b2b0273fee73162bf476cebec8f
|
||||
Author: Mark Wielaard <mjw@redhat.com>
|
||||
Date: Fri Jul 4 14:30:48 2014 +0200
|
||||
|
||||
Add ppc64le ELFv2 abi support to backends and elflint.
|
||||
|
||||
The big endian vs little endian changes are already handled by detecting
|
||||
the EI_DATA data encoding. And the function descriptors are already not
|
||||
used when we see there is no .opd section. This change adds new checks
|
||||
for st_other bits, new relocations and recognizes DT_PPC64_OPT.
|
||||
|
||||
Signed-off-by: Menanteau Guy <menantea@linux.vnet.ibm.com>
|
||||
Signed-off-by: Mark Wielaard <mjw@redhat.com>
|
||||
|
||||
diff --git a/backends/ppc64_init.c b/backends/ppc64_init.c
|
||||
index e52231c..7ea2b23 100644
|
||||
--- a/backends/ppc64_init.c
|
||||
+++ b/backends/ppc64_init.c
|
||||
@@ -61,6 +61,7 @@ ppc64_init (elf, machine, eh, ehlen)
|
||||
HOOK (eh, machine_flag_check);
|
||||
HOOK (eh, copy_reloc_p);
|
||||
HOOK (eh, check_special_symbol);
|
||||
+ HOOK (eh, check_st_other_bits);
|
||||
HOOK (eh, bss_plt_p);
|
||||
HOOK (eh, return_value_location);
|
||||
HOOK (eh, register_info);
|
||||
diff --git a/backends/ppc64_reloc.def b/backends/ppc64_reloc.def
|
||||
index 6366f46..3a693cf 100644
|
||||
--- a/backends/ppc64_reloc.def
|
||||
+++ b/backends/ppc64_reloc.def
|
||||
@@ -132,6 +132,21 @@ RELOC_TYPE (DTPREL16_HIGHER, REL)
|
||||
RELOC_TYPE (DTPREL16_HIGHERA, REL)
|
||||
RELOC_TYPE (DTPREL16_HIGHEST, REL)
|
||||
RELOC_TYPE (DTPREL16_HIGHESTA, REL)
|
||||
+RELOC_TYPE (TLSGD, REL)
|
||||
+RELOC_TYPE (TLSLD, REL)
|
||||
+RELOC_TYPE (TOCSAVE, REL)
|
||||
+RELOC_TYPE (ADDR16_HIGH, REL)
|
||||
+RELOC_TYPE (ADDR16_HIGHA, REL)
|
||||
+RELOC_TYPE (TPREL16_HIGH, REL)
|
||||
+RELOC_TYPE (TPREL16_HIGHA, REL)
|
||||
+RELOC_TYPE (DTPREL16_HIGH, REL)
|
||||
+RELOC_TYPE (DTPREL16_HIGHA, REL)
|
||||
+RELOC_TYPE (JMP_IREL, REL)
|
||||
+RELOC_TYPE (IRELATIVE, REL)
|
||||
+RELOC_TYPE (REL16, REL)
|
||||
+RELOC_TYPE (REL16_LO, REL)
|
||||
+RELOC_TYPE (REL16_HI, REL)
|
||||
+RELOC_TYPE (REL16_HA, REL)
|
||||
|
||||
/* Notes from Alan Modra:
|
||||
|
||||
diff --git a/backends/ppc64_symbol.c b/backends/ppc64_symbol.c
|
||||
index 212d414..5a020d8 100644
|
||||
--- a/backends/ppc64_symbol.c
|
||||
+++ b/backends/ppc64_symbol.c
|
||||
@@ -72,6 +72,8 @@ ppc64_dynamic_tag_name (int64_t tag, char *buf __attribute__ ((unused)),
|
||||
return "PPC64_OPD";
|
||||
case DT_PPC64_OPDSZ:
|
||||
return "PPC64_OPDSZ";
|
||||
+ case DT_PPC64_OPT:
|
||||
+ return "PPC64_OPT";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -84,7 +86,8 @@ ppc64_dynamic_tag_check (int64_t tag)
|
||||
{
|
||||
return (tag == DT_PPC64_GLINK
|
||||
|| tag == DT_PPC64_OPD
|
||||
- || tag == DT_PPC64_OPDSZ);
|
||||
+ || tag == DT_PPC64_OPDSZ
|
||||
+ || tag == DT_PPC64_OPT);
|
||||
}
|
||||
|
||||
|
||||
@@ -120,3 +123,9 @@ ppc64_machine_flag_check (GElf_Word flags)
|
||||
{
|
||||
return flags == 0 || flags == 1 || flags == 2;
|
||||
}
|
||||
+
|
||||
+bool
|
||||
+ppc64_check_st_other_bits (unsigned char st_other)
|
||||
+{
|
||||
+ return (PPC64_LOCAL_ENTRY_OFFSET (st_other) != 0);
|
||||
+}
|
||||
diff --git a/src/elflint.c b/src/elflint.c
|
||||
index 5568c65..d6a4774 100644
|
||||
--- a/src/elflint.c
|
||||
+++ b/src/elflint.c
|
||||
@@ -799,7 +799,8 @@ section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"),
|
||||
&& strcmp (name, "__fini_array_end") != 0
|
||||
&& strcmp (name, "__bss_start") != 0
|
||||
&& strcmp (name, "__bss_start__") != 0
|
||||
- && strcmp (name, "__TMC_END__") != 0))
|
||||
+ && strcmp (name, "__TMC_END__") != 0
|
||||
+ && strcmp (name, ".TOC.") != 0))
|
||||
ERROR (gettext ("\
|
||||
section [%2d] '%s': symbol %zu: st_value out of bounds\n"),
|
||||
idx, section_name (ebl, idx), cnt);
|
@ -1,7 +1,7 @@
|
||||
Name: elfutils
|
||||
Summary: A collection of utilities and DSOs to handle compiled objects
|
||||
Version: 0.159
|
||||
%global baserelease 4
|
||||
%global baserelease 5
|
||||
URL: https://fedorahosted.org/elfutils/
|
||||
%global source_url http://fedorahosted.org/releases/e/l/elfutils/%{version}/
|
||||
License: GPLv3+ and (GPLv2+ or LGPLv3+)
|
||||
@ -47,6 +47,9 @@ Source: %{?source_url}%{name}-%{version}.tar.bz2
|
||||
Patch1: %{?source_url}elfutils-portability.patch
|
||||
Patch2: elfutils-aarch64-user_regs_struct.patch
|
||||
Patch3: elfutils-0.159-argp-attach.patch
|
||||
Patch4: elfutils-0.159-aarch64-bool-ret.patch
|
||||
Patch5: elfutils-0.159-elf-h.patch
|
||||
Patch6: elfutils-0.159-ppc64le-elfv2-abi.patch
|
||||
|
||||
%if !%{compat}
|
||||
Release: %{baserelease}%{?dist}
|
||||
@ -211,6 +214,9 @@ sed -i.scanf-m -e 's/%m/%a/g' src/addr2line.c tests/line2addr.c
|
||||
|
||||
%patch2 -p1 -b .aa64~1
|
||||
%patch3 -p1 -b .argp-attach
|
||||
%patch4 -p1 -b .aarch64-ret-bool
|
||||
%patch5 -p1 -b .elf-h
|
||||
%patch6 -p1 -b .ppc64le-elfv2-abi
|
||||
|
||||
find . -name \*.sh ! -perm -0100 -print | xargs chmod +x
|
||||
|
||||
@ -333,6 +339,11 @@ rm -rf ${RPM_BUILD_ROOT}
|
||||
%{_libdir}/libelf.a
|
||||
|
||||
%changelog
|
||||
* Fri Jul 4 2014 Mark Wielaard <mjw@redhat.com> - 0.159-5
|
||||
- Add elfutils-0.159-aarch64-bool-ret.patch
|
||||
- Add elfutils-0.159-elf-h.patch
|
||||
- Add elfutils-0.159-ppc64le-elfv2-abi.patch (#1110249)
|
||||
|
||||
* Tue Jun 10 2014 Mark Wielaard <mjw@redhat.com> - 0.159-4
|
||||
- Add elfutils-0.159-argp-attach.patch (#1107654)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user