From patchwork Tue Aug 5 11:10:07 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mikhail Ilin X-Patchwork-Id: 376662 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 898FC1400E4 for ; Tue, 5 Aug 2014 21:11:21 +1000 (EST) Received: from localhost ([::1]:58677 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XEceF-0005oa-Lm for incoming@patchwork.ozlabs.org; Tue, 05 Aug 2014 07:11:19 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32794) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XEcdn-0005Na-EW for qemu-devel@nongnu.org; Tue, 05 Aug 2014 07:10:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XEcdf-0006Lv-7a for qemu-devel@nongnu.org; Tue, 05 Aug 2014 07:10:51 -0400 Received: from mailout4.w1.samsung.com ([210.118.77.14]:54223) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XEcdf-0006Lf-12 for qemu-devel@nongnu.org; Tue, 05 Aug 2014 07:10:43 -0400 Received: from eucpsbgm1.samsung.com (unknown [203.254.199.244]) by mailout4.w1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0N9T00BZMZ1HV200@mailout4.w1.samsung.com> for qemu-devel@nongnu.org; Tue, 05 Aug 2014 12:10:29 +0100 (BST) X-AuditID: cbfec7f4-b7f156d0000063c7-68-53e0bbaff6be Received: from eusync3.samsung.com ( [203.254.199.213]) by eucpsbgm1.samsung.com (EUCPMTA) with SMTP id 88.5F.25543.FABB0E35; Tue, 05 Aug 2014 12:10:39 +0100 (BST) Received: from michail.rnd.samsung.ru ([106.109.9.224]) by eusync3.samsung.com (Oracle Communications Messaging Server 7u4-23.01 (7.0.4.23.0) 64bit (built Aug 10 2011)) with ESMTPA id <0N9T0017LZ1QFU70@eusync3.samsung.com>; Tue, 05 Aug 2014 12:10:39 +0100 (BST) From: Mikhail Ilyin To: qemu-devel@nongnu.org Date: Tue, 05 Aug 2014 15:10:07 +0400 Message-id: <1407237007-19902-1-git-send-email-m.ilin@samsung.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrPJMWRmVeSWpSXmKPExsVy+t/xq7rrdz8INnjaoGGx4NB6NovjvTtY LE5uuMTmwOxx+OtCFo8n1zYzefRtWcUYwBzFZZOSmpNZllqkb5fAlfHhb0TBRPGKnt0X2BoY Zwh0MXJySAiYSPTfOM8KYYtJXLi3ng3EFhJYyiix8xF3FyMXkN3LJHHhyzsmkASbgIbEw137 WUBsEQFJid9dp5lBbGYBLYmfH1rAaoSBhi6euQ2shkVAVeLOyW6wobwCThKPZu5nh1gmJ3Hy 2GTWCYzcCxgZVjGKppYmFxQnpeca6hUn5haX5qXrJefnbmKEePrLDsbFx6wOMQpwMCrx8Bqc vhssxJpYVlyZe4hRgoNZSYRXYs2DYCHelMTKqtSi/Pii0pzU4kOMTBycUg2MnGeqvu57w3x4 liaXXPh7jh1/1WPK+vqmTew8oLTxwpyofc4+QvVvr4axbXb984x9N1/6nvPXr9gfsFj37Shj zU1R8wXL7DSvSvC/D5dyeP7Ga+9ys283DOV+HE/ZLDxzf8TL7owTnBzapgJWvof5btt9eGvp zZf8f39SfO6/KYfr11Zu8av+oMRSnJFoqMVcVJwIAHR4DpPSAQAA X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 210.118.77.14 Cc: m.ilin@samsung.com, riku.voipio@iki.fi Subject: [Qemu-devel] [PATCH] linux-user: /proc/self/maps content X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Build /proc/self/maps doing a match against guest memory translation table. Output only that map records which are valid for guest memory layout. Signed-off-by: Mikhail Ilyin --- include/exec/cpu-all.h | 2 ++ linux-user/syscall.c | 25 ++++++++++--------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h index f91581f..f9d132f 100644 --- a/include/exec/cpu-all.h +++ b/include/exec/cpu-all.h @@ -198,6 +198,8 @@ extern unsigned long reserved_va; #define RESERVED_VA 0ul #endif +#define GUEST_ADDR_MAX (RESERVED_VA ? RESERVED_VA : \ + (1ul << TARGET_VIRT_ADDR_SPACE_BITS) - 1) #endif /* page related stuff */ diff --git a/linux-user/syscall.c b/linux-user/syscall.c index a50229d..189a8c0 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -5092,10 +5092,8 @@ static int open_self_cmdline(void *cpu_env, int fd) static int open_self_maps(void *cpu_env, int fd) { -#if defined(TARGET_ARM) || defined(TARGET_M68K) || defined(TARGET_UNICORE32) CPUState *cpu = ENV_GET_CPU((CPUArchState *)cpu_env); TaskState *ts = cpu->opaque; -#endif FILE *fp; char *line = NULL; size_t len = 0; @@ -5118,13 +5116,18 @@ static int open_self_maps(void *cpu_env, int fd) if ((fields < 10) || (fields > 11)) { continue; } - if (!strncmp(path, "[stack]", 7)) { - continue; - } - if (h2g_valid(min) && h2g_valid(max)) { + if (h2g_valid(min)) { + int flags = page_get_flags(h2g(min)); + max = h2g_valid(max - 1) ? max : (uint64_t)g2h(GUEST_ADDR_MAX); + if (page_check_range(h2g(min), max - min, flags) == -1) { + continue; + } + if (h2g(min) == ts->info->stack_limit) { + pstrcpy(path, sizeof(path), " [stack]"); + } dprintf(fd, TARGET_ABI_FMT_lx "-" TARGET_ABI_FMT_lx " %c%c%c%c %08" PRIx64 " %02x:%02x %d %s%s\n", - h2g(min), h2g(max), flag_r, flag_w, + h2g(min), h2g(max - 1) + 1, flag_r, flag_w, flag_x, flag_p, offset, dev_maj, dev_min, inode, path[0] ? " " : "", path); } @@ -5133,14 +5136,6 @@ static int open_self_maps(void *cpu_env, int fd) free(line); fclose(fp); -#if defined(TARGET_ARM) || defined(TARGET_M68K) || defined(TARGET_UNICORE32) - dprintf(fd, "%08llx-%08llx rw-p %08llx 00:00 0 [stack]\n", - (unsigned long long)ts->info->stack_limit, - (unsigned long long)(ts->info->start_stack + - (TARGET_PAGE_SIZE - 1)) & TARGET_PAGE_MASK, - (unsigned long long)0); -#endif - return 0; }