From patchwork Fri Nov 6 06:59:11 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maninder Singh X-Patchwork-Id: 9576 Received: (qmail 30232 invoked by alias); 6 Nov 2015 06:59:52 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 30221 invoked by uid 89); 6 Nov 2015 06:59:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.2 required=5.0 tests=AWL, BAYES_00, KAM_LAZY_DOMAIN_SECURITY, SPF_HELO_PASS, T_HDRS_LCASE, T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: mailout1.samsung.com From: Maninder Singh To: libc-alpha@sourceware.org, marcus.shawcroft@arm.com Cc: mark.hatle@windriver.com, ajeet.y@samsung.com, hakbong5.lee@samsung.com, doha.hwang@samsung.com, pankaj.m@samsung.com, Maninder Singh , Vaneet Narang Subject: [PATCH 1/1] aarch64:fix aarch64_tlsdesc conflict handling Date: Fri, 06 Nov 2015 12:29:11 +0530 Message-id: <1446793151-1563-1-git-send-email-maninder1.s@samsung.com> DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected 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 Signed-off-by: Maninder Singh --- 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 {