From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1944) id 64AD03860C3C; Wed, 12 Oct 2022 14:18:27 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 64AD03860C3C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1665584307; bh=hIDV9f5KsDX63EirSVvQPB/V+2kDE6CvuJjs7ZirIEE=; h=From:To:Subject:Date:From; b=T27qflNV7doI6Wcpio+TzwL43xw40cFBTT/Ilv4vdL1BrpIHPvTHb1WKOxVm15lFa xetQ91lX8ezGfuMNHhih+Ti/PwhFSbAUr0ROiHB9ESZZBSk0rNuiASLIfxhSuI1QIG p8FONeFZtclMIBaNkzO8n6Mfso0nrkvi/TGxu3Bo= 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: 66e78c5b74e77d85c5d58908949c0d02ff00bf28 X-Git-Newrev: bbfb104b5087108bc2068d0c2b60391b636b9b48 Message-Id: <20221012141827.64AD03860C3C@sourceware.org> Date: Wed, 12 Oct 2022 14:18:27 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=bbfb104b5087108bc2068d0c2b60391b636b9b48 commit bbfb104b5087108bc2068d0c2b60391b636b9b48 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;