mirror of
https://git.yoctoproject.org/poky
synced 2026-07-27 07:27:12 +00:00
elfutils: 0.162 -> 0.163
(From OE-Core rev: cb8fc7521cdaaa7b8f82a0c6dfc6526778c99099) Signed-off-by: Robert Yang <liezhi.yang@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
d32b383c3a
commit
f9ac3f3e20
@@ -0,0 +1,83 @@
|
||||
From: Mark Wielaard <mjw@redhat.com>
|
||||
Date: Sun, 15 Jun 2014 12:30:02 +0200
|
||||
Subject: libebl: Add ebl_unwind_ret_mask.
|
||||
|
||||
Another ARM oddity. A return value address in an unwind will contain an
|
||||
extra bit to indicate whether to return to a regular ARM or THUMB function.
|
||||
Add a new ebl function to return a mask to use to get the actual return
|
||||
address during an unwind ebl_unwind_ret_mask.
|
||||
|
||||
Rebase arm_unwind_ret_mask.patch from 0.159 to 0.160
|
||||
|
||||
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
|
||||
---
|
||||
backends/arm_init.c | 3 +++
|
||||
libebl/eblinitreg.c | 8 ++++++++
|
||||
libebl/libebl.h | 4 ++++
|
||||
libebl/libeblP.h | 6 ++++++
|
||||
4 files changed, 21 insertions(+)
|
||||
|
||||
diff --git a/backends/arm_init.c b/backends/arm_init.c
|
||||
index 2266829..f8df042 100644
|
||||
--- a/backends/arm_init.c
|
||||
+++ b/backends/arm_init.c
|
||||
@@ -87,5 +87,8 @@ arm_init (elf, machine, eh, ehlen)
|
||||
/* Bit zero encodes whether an function address is THUMB or ARM. */
|
||||
eh->func_addr_mask = ~(GElf_Addr)1;
|
||||
|
||||
+ /* Bit zero encodes whether to return to a THUMB or ARM function. */
|
||||
+ eh->unwind_ret_mask = ~(GElf_Addr)1;
|
||||
+
|
||||
return MODVERSION;
|
||||
}
|
||||
diff --git a/libebl/eblinitreg.c b/libebl/eblinitreg.c
|
||||
index 5729b3c..ca681c0 100644
|
||||
--- a/libebl/eblinitreg.c
|
||||
+++ b/libebl/eblinitreg.c
|
||||
@@ -56,3 +56,11 @@ ebl_func_addr_mask (Ebl *ebl)
|
||||
return ((ebl == NULL || ebl->func_addr_mask == 0)
|
||||
? ~(GElf_Addr)0 : ebl->func_addr_mask);
|
||||
}
|
||||
+
|
||||
+GElf_Addr
|
||||
+ebl_unwind_ret_mask (Ebl *ebl)
|
||||
+{
|
||||
+ return ((ebl == NULL || ebl->unwind_ret_mask == 0)
|
||||
+ ? ~(GElf_Addr)0 : ebl->unwind_ret_mask);
|
||||
+}
|
||||
+
|
||||
diff --git a/libebl/libebl.h b/libebl/libebl.h
|
||||
index 40cf635..be70027 100644
|
||||
--- a/libebl/libebl.h
|
||||
+++ b/libebl/libebl.h
|
||||
@@ -420,6 +420,10 @@ extern size_t ebl_frame_nregs (Ebl *ebl)
|
||||
tables) is needed. */
|
||||
extern GElf_Addr ebl_func_addr_mask (Ebl *ebl);
|
||||
|
||||
+/* Mask to use for unwind return address in case the architecture adds
|
||||
+ some extra non-address bits to it. */
|
||||
+extern GElf_Addr ebl_unwind_ret_mask (Ebl *ebl);
|
||||
+
|
||||
/* Convert *REGNO as is in DWARF to a lower range suitable for
|
||||
Dwarf_Frame->REGS indexing. */
|
||||
extern bool ebl_dwarf_to_regno (Ebl *ebl, unsigned *regno)
|
||||
diff --git a/libebl/libeblP.h b/libebl/libeblP.h
|
||||
index dbd67f3..e18ace6 100644
|
||||
--- a/libebl/libeblP.h
|
||||
+++ b/libebl/libeblP.h
|
||||
@@ -70,6 +70,12 @@ struct ebl
|
||||
otherwise it should be the actual mask to use. */
|
||||
GElf_Addr func_addr_mask;
|
||||
|
||||
+ /* Mask to use to get the return address from an unwind in case the
|
||||
+ architecture adds some extra non-address bits to it. When not
|
||||
+ initialized (0) then ebl_unwind_ret_mask will return ~0, otherwise
|
||||
+ it should be the actual mask to use. */
|
||||
+ GElf_Addr unwind_ret_mask;
|
||||
+
|
||||
/* Function descriptor load address and table as used by
|
||||
ebl_resolve_sym_value if available for this arch. */
|
||||
GElf_Addr fd_addr;
|
||||
--
|
||||
1.9.1
|
||||
|
||||
Reference in New Issue
Block a user