From patchwork Wed Oct 14 11:14:25 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: henrik.wallin@windriver.com X-Patchwork-Id: 9106 Received: (qmail 86126 invoked by alias); 14 Oct 2015 15:07:40 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 86035 invoked by uid 89); 14 Oct 2015 15:07:39 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=0.9 required=5.0 tests=AWL, BAYES_40, KAM_LAZY_DOMAIN_SECURITY, T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: mail.windriver.com Received: from mail.windriver.com (HELO mail.windriver.com) (147.11.1.11) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Wed, 14 Oct 2015 15:07:34 +0000 Received: from arn-build2.wrs.com (arn-build2.wrs.com [128.224.95.15]) by mail.windriver.com (8.15.2/8.15.1) with ESMTP id t9EBEZjR010719 for ; Wed, 14 Oct 2015 04:14:35 -0700 (PDT) Received: by arn-build2.wrs.com (Postfix, from userid 18580) id E1508220B12; Wed, 14 Oct 2015 13:14:33 +0200 (CEST) From: henrik.wallin@windriver.com To: gdb-patches@sourceware.org Subject: [RFC][PATCH 07/15] Fix mmap usage of MAP_FIXED for multiple pages. Date: Wed, 14 Oct 2015 13:14:25 +0200 Message-Id: <64c9969c224e555335979b9168cfacb839727596.1444820235.git.henrik.wallin@windriver.com> In-Reply-To: References: In-Reply-To: References: From: Henrik Wallin mmap using MAP_FIXED will overwrite mapped pages if multiple pages are requested. E.g. On ARM it will result in overwriting the main code pages. Fix by not using MAP_FIXED and use mmunmap in case we don't get the start address we asked for. gdb/gdbserver/ChangeLog: * tracepoint.c : Include stdint.h and sys/mman.h. (initialize_tracepoint): Fix problem with MAP_FIXED usage in mmap. Signed-off-by: Henrik Wallin --- gdb/gdbserver/tracepoint.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gdb/gdbserver/tracepoint.c b/gdb/gdbserver/tracepoint.c index d2ad197e58ab..35a125c951d5 100644 --- a/gdb/gdbserver/tracepoint.c +++ b/gdb/gdbserver/tracepoint.c @@ -27,6 +27,9 @@ #include #include "gdb_sys_time.h" #include +#include +#include + #include "ax.h" #include "tdesc.h" @@ -7392,10 +7395,12 @@ initialize_tracepoint (void) = (char *) mmap ((void *) addr, pagesize * SCRATCH_BUFFER_NPAGES, PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - if (gdb_jump_pad_buffer != MAP_FAILED) + if (gdb_jump_pad_buffer == (void *)addr) break; + if (gdb_jump_pad_buffer != MAP_FAILED) + munmap(gdb_jump_pad_buffer, pagesize * SCRATCH_BUFFER_NPAGES); } if (addr == 0)