This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 1/1] aarch64:fix aarch64_tlsdesc conflict handling


This patch fixes aarch64_tlsdesc conflict handling in 
.gnu.conflict section. This patch is added to support prelink
on aarch64 architecture.
http://git.yoctoproject.org/cgit/cgit.cgi/prelink-cross/commit
/?h=cross_prelink_aarch64&id=2e83ded69171d87b76bcffaeffbd2cdb532663de

Signed-off-by: Vaneet Narang <v.narang@samsung.com>
Signed-off-by: Maninder Singh <maninder1.s@samsung.com>
---
 sysdeps/aarch64/dl-machine.h |   17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h
index 217e179..70c112d 100644
--- a/sysdeps/aarch64/dl-machine.h
+++ b/sysdeps/aarch64/dl-machine.h
@@ -290,9 +290,20 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
 #ifndef RTLD_BOOTSTRAP
 	    if (! sym)
 	      {
-		td->arg = (void*)reloc->r_addend;
-		td->entry = _dl_tlsdesc_undefweak;
-	      }
+			ElfW(Rela) * conflict_start = NULL;
+			ElfW(Rela) * conflict_end = NULL;
+			if ( l->l_info [ADDRIDX (DT_GNU_CONFLICT)])
+		      {
+				conflict_start = (ElfW(Rela) *) map->l_info [ADDRIDX (DT_GNU_CONFLICT)]->d_un.d_ptr;
+				conflict_end = conflict_start +
+								map->l_info [VALIDX (DT_GNU_CONFLICTSZ)]->d_un.d_val;
+		      }
+			td->arg = (void*)reloc->r_addend;
+			if(conflict_start <= reloc && conflict_end >= reloc)
+				td->entry = _dl_tlsdesc_return;
+			else
+				td->entry = _dl_tlsdesc_undefweak;
+	      }
 	    else
 #endif
 	      {
-- 
1.7.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]