From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1944) id 2FA18385114D; Thu, 27 Oct 2022 13:59:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2FA18385114D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1666879169; bh=3gNGpcLxL7F2kmUNqxZ1zGdSS3qmZ5AJXl/rUxTBwfU=; h=From:To:Subject:Date:From; b=w13bkUWZcble5524lno4iatxBPb+m5zLMIEXXhZw0TxlgfK+tZzglDOVZPm+h4i2M bZ1ivkiBS+/k2M95RUrByJf+Qlb2+USZCcQrr8IbZv958j3dbKhwxk0PNQS54zV4Pa Wjzmkz2dzvLtXRkwvaPifTK8rmOBG5VxRVj6748s= 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: e36abf5a0caff4aac5c447862567fb659a9676f2 X-Git-Newrev: 5ea99c81afe66b84460685114e79b95b97c7ba83 Message-Id: <20221027135929.2FA18385114D@sourceware.org> Date: Thu, 27 Oct 2022 13:59:29 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=5ea99c81afe66b84460685114e79b95b97c7ba83 commit 5ea99c81afe66b84460685114e79b95b97c7ba83 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;