From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1944) id 9B3A23853D70; Wed, 23 Nov 2022 14:49:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9B3A23853D70 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1669214956; bh=5J5ENdN263Fgn6cVQi/QAaXhonwc/sKkE+KvxLTrMYw=; h=From:To:Subject:Date:From; b=Px9AHz4X0REcs0aPFzhImPweqKCCGz0Xf3d/OoRxhkCVKMoShwLxIrOtHFzMTQNTL IofddvvYqzeVANBnPWmD3h/egDvx4BwbnP6o+5JyXfFOH/zfNpatKuIvBRywy5P2E2 DDF6gxfGL+YAMazqGJELOOrT0QSuo5u5fc14fJmY= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Szabolcs Nagy To: glibc-cvs@sourceware.org Subject: [glibc/arm/morello/main] TODO(api): cheri: fix dl_iterate_phdr dlpi_addr X-Act-Checkin: glibc X-Git-Author: Szabolcs Nagy X-Git-Refname: refs/heads/arm/morello/main X-Git-Oldrev: 44388a14fcba267d2b5062a87f72f5ce2a6587ca X-Git-Newrev: 9d6a71514dee3ec6bdc6977339de5d31cbef8c4c Message-Id: <20221123144916.9B3A23853D70@sourceware.org> Date: Wed, 23 Nov 2022 14:49:16 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=9d6a71514dee3ec6bdc6977339de5d31cbef8c4c commit 9d6a71514dee3ec6bdc6977339de5d31cbef8c4c Author: Szabolcs Nagy Date: Wed Sep 7 17:37:38 2022 +0100 TODO(api): cheri: fix dl_iterate_phdr dlpi_addr The dlpi_addr field is a capability that has value l_addr, but we can only do this for libraries (ET_DYN) where l_addr == l_map_start, otherwise we return l_addr which is normally 0 then (ET_EXEC) so the caller can detect and special case it. For now l_addr != 0 and l_addr != l_map_start case is not supported. Note: this api may be used by the unwinder to find and read .eh_frame data. TODO: dlpi_addr could be address only, but requires unwinder update and agreement about the abi. Diff: --- elf/dl-iteratephdr.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/elf/dl-iteratephdr.c b/elf/dl-iteratephdr.c index 4d12a8ed50..146850b88a 100644 --- a/elf/dl-iteratephdr.c +++ b/elf/dl-iteratephdr.c @@ -61,7 +61,13 @@ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info, for (l = GL(dl_ns)[ns]._ns_loaded; l != NULL; l = l->l_next) { +#ifdef __CHERI_PURE_CAPABILITY__ + info.dlpi_addr = l->l_real->l_addr == l->l_real->l_map_start + ? l->l_real->l_map_start + : l->l_real->l_addr; +#else info.dlpi_addr = l->l_real->l_addr; +#endif info.dlpi_name = l->l_real->l_name; info.dlpi_phdr = l->l_real->l_phdr; info.dlpi_phnum = l->l_real->l_phnum;