From patchwork Wed Jul 31 16:38:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Fedotov X-Patchwork-Id: 170193 Delivered-To: patch@linaro.org Received: by 2002:a92:512:0:0:0:0:0 with SMTP id q18csp4245902ile; Wed, 31 Jul 2019 09:38:42 -0700 (PDT) X-Google-Smtp-Source: APXvYqxAmsyPhajCQxYsMUfWdnaUuu2et7iUuLdKcduc4mTeplhp5i4fmh/s/pEby7ZD2uMpJxdq X-Received: by 2002:a63:9245:: with SMTP id s5mr116861565pgn.123.1564591121953; Wed, 31 Jul 2019 09:38:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564591121; cv=none; d=google.com; s=arc-20160816; b=B2Fefxm1irtEtcTvF6VPrjgvuEmLlAnP/FUs0zzm8/kaVy+dHBphkcB8ZegMFg2Uu4 FMQ6o23bTQDX0A/yCmQ0n/M/zEJfnm1ha6KI+IOIaffKJBcevLjgp8SzpvbOejWVNtbu R81lG/FDNI1p8rJXMGxBX31/UsCtunuBgHRj28Qf1smMpsM4LVOsHvfmz8fXB+xAPPMR f9R6sAxEo25nybb9iQEFH6rDSLsgzBlEjMQ3lMRK6vG4ruMIY5yiV2lfw4cS90ZzQwPF Efup7MkK63zYHpipF39Jq//J8R7GctIoqD6sGK8D+5DUzl/CC6qQAZCJuaZREmqhxTGe jSvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:date:subject:cc:to:from:dkim-signature:delivered-to :sender:list-help:list-post:list-archive:list-subscribe :list-unsubscribe:list-id:precedence:mailing-list:dkim-signature :domainkey-signature; bh=WQWSz+VZ0TRVn4xK5UIuderZYlwmT7d85FvRdA2eCLA=; b=gVhaIhZ+tiyRi1VEKhkBOGYh2NIN5yPsXZ6dyyXwwF4aqKjaAahbF/hEzCwdVfv8zZ 0+rQ32FJQLL6nl+0dMMTqoRwuuV3up+SVt+hJd+/7MJym6XpHq2r/IC6nsL8PbbrGcUw wWgJCkQMc2iHQv4TsxVFkB11ZtB2j3zTMGOOc+N8c2O5U6whS07XFx+/tJTloHko6XCs wUCddTnYfZMUmInnKzaICbVEQh66T368cSvnLZxrExIMBDqiiLo/7FgreWai5N8FYZmL JwTKM325BhVRY4W0Tt2oRIloJHUIuwVVB8BYGO9vFFat9jX0CedNI4ovBUOhtRq6hwjn a9MQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=xzO2Rn3+; dkim=pass header.i=@gmail.com header.s=20161025 header.b=EEBpnVJn; spf=pass (google.com: domain of newlib-return-17095-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom="newlib-return-17095-patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id q187si31745687pfb.51.2019.07.31.09.38.41 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 31 Jul 2019 09:38:41 -0700 (PDT) Received-SPF: pass (google.com: domain of newlib-return-17095-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=xzO2Rn3+; dkim=pass header.i=@gmail.com header.s=20161025 header.b=EEBpnVJn; spf=pass (google.com: domain of newlib-return-17095-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom="newlib-return-17095-patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id; q=dns; s= default; b=v4byB1N+xUFAULskltpHeNr3IlGvuiJU2LLnCn3Dr9vFt/UYwJE5i uLYw2Bkiigk0/l8Ye9iVe8w787EAuCAgsQzp0lOJi3wOuHcpeZe7XCWrD9snD6cL nomnMW+NTFUfZHcnVrRobNNwbzZ9drEQISiRYIljVR1NuD7Zw+DJFU= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id; s=default; bh=Feaga8j2MKSOlTqi0FlhDUFvT/4=; b=xzO2Rn3+hZs+IzcH4+JjcTdBWaRZ 2l1SWXtfEBbgnlO1KMJWQ3KEf/xe6ZvMvAEJED8JXn9c8FQECLLXDU9fpuemBmvs MF1UQv4F4kSsUqruQAySdhpDbeKmwpdfu5s6XwHV3kKmk5fILJq58M9h7N+HF0iz Bfcm1a6Lny8RFCI= Received: (qmail 74202 invoked by alias); 31 Jul 2019 16:38:33 -0000 Mailing-List: contact newlib-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: newlib-owner@sourceware.org Delivered-To: mailing list newlib@sourceware.org Received: (qmail 73464 invoked by uid 89); 31 Jul 2019 16:38:33 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=angel, Angel, honour, UD:cygwin.com X-HELO: mail-lf1-f66.google.com Received: from mail-lf1-f66.google.com (HELO mail-lf1-f66.google.com) (209.85.167.66) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 31 Jul 2019 16:38:32 +0000 Received: by mail-lf1-f66.google.com with SMTP id c9so47861178lfh.4 for ; Wed, 31 Jul 2019 09:38:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=WQWSz+VZ0TRVn4xK5UIuderZYlwmT7d85FvRdA2eCLA=; b=EEBpnVJnhuUe1vnGuAcPmGpI6nWDY1OzqV9XYHurQ18MzJzTINr2C7aaupQelNjrBg c9WLB/5Oc4C3Ljf8N8ejOD/0l/htQaRpmj+TLp4upk9eQp4hSJhNwf15AAJTDPaOn+Rm Ugp8m21gbumCGNHecfDMGRqxNNSThpxTVdBoCpRev8yAcSZPl2igCGd2BoBwiK64oivu +Ryh8kknmFwkNnBuhS9pbbqDjD0UuF/ZcGSBT5me4fUt/LYlew13XDNfZO13kkgSlkjP Dx1vhQQSYB6zIqQsM2L03sXZlK5YT5UDJyq5UN2xepayGhLRzjP9TXOWeZfdVkPYc3R7 xCmA== Return-Path: Received: from af-ubuntu18-hyperv.cmtknet.ru (relay.cmtk.ru. [195.5.145.226]) by smtp.gmail.com with ESMTPSA id q4sm16001413lje.99.2019.07.31.09.38.28 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 31 Jul 2019 09:38:29 -0700 (PDT) From: Alexander Fedotov To: Richard.Earnshaw@arm.com, newlib@sourceware.org Cc: Alexander Fedotov Subject: [PATCH v1 1/3] Reflect commits: 1. 8d98f95 (https://cygwin.com/git/gitweb.cgi?p=newlib-cygwin.git; a=commit; h=8d98f956cc398d086794e19051c3380d599022da) 2. 5c9403e (https://cygwin.com/git/gitweb.cgi?p=newlib-cygwin.git; a=commit; h=5c9403eaf40951f8a4f55ed65f661b485ff44be7) Date: Wed, 31 Jul 2019 11:38:03 -0500 Message-Id: <20190731163805.28834-1-alfedotov@gmail.com> --- libgloss/arm/syscalls.c | 12 ++++++------ newlib/libc/sys/arm/crt0.S | 7 +++++++ newlib/libc/sys/arm/syscalls.c | 9 +++++++-- 3 files changed, 20 insertions(+), 8 deletions(-) -- 2.17.1 diff --git a/libgloss/arm/syscalls.c b/libgloss/arm/syscalls.c index dacd1a9d3..3605e0fd0 100644 --- a/libgloss/arm/syscalls.c +++ b/libgloss/arm/syscalls.c @@ -707,15 +707,15 @@ uint __heap_limit = 0xcafedead; void * __attribute__((weak)) _sbrk (ptrdiff_t incr) { - extern char end asm ("end"); /* Defined by the linker. */ + extern char end asm ("end"); /* Defined by the linker. */ static char * heap_end; - char * prev_heap_end; + char * prev_heap_end; if (heap_end == NULL) heap_end = & end; - + prev_heap_end = heap_end; - + if ((heap_end + incr > stack_ptr) /* Honour heap limit if it's valid. */ || (__heap_limit != 0xcafedead && heap_end + incr > (char *)__heap_limit)) @@ -726,14 +726,14 @@ _sbrk (ptrdiff_t incr) extern void abort (void); _write (1, "_sbrk: Heap and stack collision\n", 32); - + abort (); #else errno = ENOMEM; return (void *) -1; #endif } - + heap_end += incr; return (void *) prev_heap_end; diff --git a/newlib/libc/sys/arm/crt0.S b/newlib/libc/sys/arm/crt0.S index 40bbc3d69..a55aa365b 100644 --- a/newlib/libc/sys/arm/crt0.S +++ b/newlib/libc/sys/arm/crt0.S @@ -282,6 +282,13 @@ #endif ldr r0, .LC0 /* Point at values read. */ + /* Set __heap_limit. */ + ldr r1, [r0, #4] + cmp r1, #0 + beq .LC33 + ldr r2, =__heap_limit + str r1, [r2] +.LC33: ldr r1, [r0, #0] cmp r1, #0 bne .LC32 diff --git a/newlib/libc/sys/arm/syscalls.c b/newlib/libc/sys/arm/syscalls.c index b52107491..a2997b44c 100644 --- a/newlib/libc/sys/arm/syscalls.c +++ b/newlib/libc/sys/arm/syscalls.c @@ -487,10 +487,13 @@ _getpid (void) return (pid_t)1; } +/* Heap limit returned from SYS_HEAPINFO Angel semihost call. */ +uint __heap_limit = 0xcafedead; + void * __attribute__((weak)) _sbrk (ptrdiff_t incr) { - extern char end asm ("end"); /* Defined by the linker. */ + extern char end asm ("end"); /* Defined by the linker. */ static char * heap_end; char * prev_heap_end; @@ -499,7 +502,9 @@ _sbrk (ptrdiff_t incr) prev_heap_end = heap_end; - if (heap_end + incr > stack_ptr) + if ((heap_end + incr > stack_ptr) + /* Honour heap limit if it's valid. */ + || (__heap_limit != 0xcafedead && heap_end + incr > (char *)__heap_limit)) { /* Some of the libstdc++-v3 tests rely upon detecting out of memory errors, so do not abort here. */ From patchwork Wed Jul 31 16:38:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Fedotov X-Patchwork-Id: 170194 Delivered-To: patch@linaro.org Received: by 2002:a92:512:0:0:0:0:0 with SMTP id q18csp4245999ile; Wed, 31 Jul 2019 09:38:49 -0700 (PDT) X-Google-Smtp-Source: APXvYqytD+oICAjbTAoAQ/JVoXprIyz3Ado8llDhKfWxmr6GNzd3catKst8pH/6uETmM8qJqENln X-Received: by 2002:a17:90a:c68c:: with SMTP id n12mr3861371pjt.33.1564591129501; Wed, 31 Jul 2019 09:38:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564591129; cv=none; d=google.com; s=arc-20160816; b=Y/os2SIWX/9QXUx1Ag/zkFE/VOPZFaTwc2gsoOYZHm0fjcm7A0quJebCwLzw42Ao2i hf/AqzEjfPiPtGjItyIRRoW+1Ro+8DbPPBZtHgjtW9bqyzMJCfWye5kozI/GI7Yta8e/ 7nGYMNThfCOVEIBICZt/SvsXE/7+X/O/kh38AWS3g2JcKAAFmr9p08Nt0f1RriI31dR/ GDiZ2icOJvsBkRgo97v4n7Ef2FCW3aU+dA4DREFgKNHy7rcJu+Ey04CcnlQtnDZ0o9SY fdD1AeHTvupG7Ad6HDI1S/JQVXXEUJiHZTg7H5/vxHjfikYlmZJu9/lmns4AzjUH9Xd5 zSXg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:delivered-to:sender:list-help:list-post:list-archive :list-subscribe:list-unsubscribe:list-id:precedence:mailing-list :dkim-signature:domainkey-signature; bh=SO6nCUY6/ihAUyyRWtH74/pBtcGKX84BNcFboYthc7A=; b=BNFlLVWQnmXNCUc/gv+QOabCAhzEOIC+X0sjgTydTxJtbKmTYWXrRbBSmLp/7PD9G2 41q6ezhtCY8X7EADUwQDpxtK6KVLP91nluYOPclOm/79Hhmgw6jkPu4JyuIl1YQ1T5DJ +zM5L7FU7fvLQLesMi8w3x96uIBwEP2AjFN97kU4jOA40BOD/JfjCmjkg6gGFbNbRmrF szdJiVIcNmOVdGCpCxRWs01KNKDXfOxaPzufMCqTJmOYgXlURGuP/nE8mSZWhc7+UCwm rLAPy+oWZGje3uKgBwMaOvtm9stg8OkCGcH7jb4ISk5MpIYaooPMG5CgvXdX1KjtQO3M Y2UQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=NbIJ8TYw; dkim=pass header.i=@gmail.com header.s=20161025 header.b=dKCaC93T; spf=pass (google.com: domain of newlib-return-17096-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom="newlib-return-17096-patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id f3si28551172plr.187.2019.07.31.09.38.49 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 31 Jul 2019 09:38:49 -0700 (PDT) Received-SPF: pass (google.com: domain of newlib-return-17096-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=NbIJ8TYw; dkim=pass header.i=@gmail.com header.s=20161025 header.b=dKCaC93T; spf=pass (google.com: domain of newlib-return-17096-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom="newlib-return-17096-patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references; q=dns; s=default; b=nHcfwcdPFei03vr8tBbBr548LoCAU/v pqgF24YzRkivzwnQNRTFmN7TBNdB8HPq+EKsKBJ8v6h1l/VyLtrmlvPPWHoIWTLV 58cqBVvNR+9Jg8IXAnqQLXJmPFRFfm9r1mRmT6rqZbrA46Dh6zyp0jYR4WArOyY4 sWdn1+X7Ud6M= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references; s=default; bh=MHaX9RpnNgFi0G95+X8EZ0WBas0=; b=NbIJ8 TYwsHDOv8RvrZiF43Gz+x9gyouj9S8VUpeozisMhEE1lXiMJ5x3UMd1uw9+MKLaw 0WwdL9Fb27aFf3gL9PSZkYgVtbBdjTiVBx0f+r+tZjlV7T7vw0i8ux+YIqxRE58R X1DDFNmbOWORvJM/bEEsPo3REgUdIepv5p34Gc= Received: (qmail 75151 invoked by alias); 31 Jul 2019 16:38:35 -0000 Mailing-List: contact newlib-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: newlib-owner@sourceware.org Delivered-To: mailing list newlib@sourceware.org Received: (qmail 75068 invoked by uid 89); 31 Jul 2019 16:38:35 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=5188, HX-Languages-Length:1116, UD:cygwin.com, cygwincom X-HELO: mail-lf1-f65.google.com Received: from mail-lf1-f65.google.com (HELO mail-lf1-f65.google.com) (209.85.167.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 31 Jul 2019 16:38:34 +0000 Received: by mail-lf1-f65.google.com with SMTP id q26so47940600lfc.3 for ; Wed, 31 Jul 2019 09:38:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=SO6nCUY6/ihAUyyRWtH74/pBtcGKX84BNcFboYthc7A=; b=dKCaC93TPsn7st9nrbjgVcUeHL5qD8CRbo1uYkymINm/5EKZUXA2HOFOgTOV1zzknS T4hDH/SyRXUisqlscA9e7m1UbnaGDGRiFGvFtnb7+ZVrWAF0JjOhmEHIm132o+ywghh/ +g1neEBv0frJBRdoDvmD1qk3g6n0Nig0ibQsHFna9bPi5dJWUYRSyulaRgMRjvd/84Qq OPcYC649ObNJaUTxNpn5wm583DCPm1On/WySrDB6Xj20ZcLA+PiM5KQf+wcr4M/kOOv5 rgR3LBQTQsQbutrVauOEMbn1AS3g1E6L4L3p3FYMePxXN6f1M4XtvB2LOmmDyfO+sFfH wYtw== Return-Path: Received: from af-ubuntu18-hyperv.cmtknet.ru (relay.cmtk.ru. [195.5.145.226]) by smtp.gmail.com with ESMTPSA id q4sm16001413lje.99.2019.07.31.09.38.31 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 31 Jul 2019 09:38:31 -0700 (PDT) From: Alexander Fedotov To: Richard.Earnshaw@arm.com, newlib@sourceware.org Cc: Alexander Fedotov Subject: [PATCH v1 2/3] Reflect commit 2404223 (https://cygwin.com/git/gitweb.cgi?p=newlib-cygwin.git; a=commit; h=2404223df651ceef42c6e2f2c9fa42fb7963db10) Date: Wed, 31 Jul 2019 11:38:04 -0500 Message-Id: <20190731163805.28834-2-alfedotov@gmail.com> In-Reply-To: <20190731163805.28834-1-alfedotov@gmail.com> References: <20190731163805.28834-1-alfedotov@gmail.com> --- newlib/libc/sys/arm/crt0.S | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) -- 2.17.1 diff --git a/newlib/libc/sys/arm/crt0.S b/newlib/libc/sys/arm/crt0.S index a55aa365b..5e677a23c 100644 --- a/newlib/libc/sys/arm/crt0.S +++ b/newlib/libc/sys/arm/crt0.S @@ -518,8 +518,17 @@ __change_mode: for _fini to be called at program exit. */ movs r4, r0 movs r5, r1 +#ifdef _LITE_EXIT + /* Make reference to atexit weak to avoid unconditionally pulling in + support code. Refer to comments in __atexit.c for more details. */ + .weak FUNCTION(atexit) + ldr r0, .Latexit + cmp r0, #0 + beq .Lweak_atexit +#endif ldr r0, .Lfini bl FUNCTION (atexit) +.Lweak_atexit: bl FUNCTION (_init) movs r0, r4 movs r1, r5 @@ -589,6 +598,13 @@ change_back: .LC2: .word __bss_end__ #ifdef __USES_INITFINI__ +#ifdef _LITE_EXIT +.Latexit: + .word FUNCTION(atexit) + + /* Weak reference _fini in case of lite exit. */ + .weak FUNCTION(_fini) +#endif .Lfini: .word FUNCTION(_fini) #endif From patchwork Wed Jul 31 16:38:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Fedotov X-Patchwork-Id: 170195 Delivered-To: patch@linaro.org Received: by 2002:a92:512:0:0:0:0:0 with SMTP id q18csp4246080ile; Wed, 31 Jul 2019 09:38:57 -0700 (PDT) X-Google-Smtp-Source: APXvYqzVWK/gf5snw6Axs//qZDXQ9242sLCVbdtjxpm0IjCC+74KtNnyR07e/IC3B/UR0tmtI8oI X-Received: by 2002:a63:10a:: with SMTP id 10mr30920734pgb.281.1564591137437; Wed, 31 Jul 2019 09:38:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564591137; cv=none; d=google.com; s=arc-20160816; b=szgaEePwluKa2sA28DY/T4v0MiHr5fuaX+rTUHjRJ2GC/oZ8Pl+WNui0sTTVwXZikv OjBSXxFUvfR2AqTe/hBE60erJj7P/HXmQUtt7V1mWre3z6rsSbI4BimswI9Alu3ch7AM k/JFGzp0rFM/FEwA29lc2DU60/iErpOQedIYtdwenzEofYSS/8mbId10UPsJueT09JOt ZSs/AjsM3/FbIEsg+TuleAP+gHWg19ycvGc84efxyn6ftRoHgxbMjoO9frjCVMGvQXzy ZMkWcYVeJV10HgRwjciOm5DFVGa9pozb6oB5AKsyQgdDF40A60aIruUoKv8OFtTLwEVA OBxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:delivered-to:sender:list-help:list-post:list-archive :list-subscribe:list-unsubscribe:list-id:precedence:mailing-list :dkim-signature:domainkey-signature; bh=zf8DTyzgoE5H9rFIy8QeU1jb01b5yeCVnpXDYlHox+Q=; b=RhmEgFcwxcDeqnj+IE4pnl8L7q6Sp4d10Jgnb2xGYVaq3YxUasRTov8yzECCNcbwUP xySbWyUFxoF1fjH6Yh5QVQJdYGeH9tntRHrZtz9FCJ9hTaA73lZq9aLJB5LRl9Tst2xK FDX7wY62dm75nncxewNb8ArIYDCaxwYeQnVyECXGnAO+KLYqO1dyk5DSWdjv99hQKTX+ l38/ihB9hQC8LRIDEuxBG/Cm/QUiz3ZYyf12W4r7hFX8anVbGRjfpLMA6qB48QkDLRkt HGHfNta11WMn/o1Zk5vh75D3Fph+mneqDggbB0lV4lCfPsQPHXMgQRVTy157EhenOm7y f9/g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b="G/yL0bQd"; dkim=pass header.i=@gmail.com header.s=20161025 header.b="d3fg/FZE"; spf=pass (google.com: domain of newlib-return-17097-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom="newlib-return-17097-patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id c189si44571201pfa.110.2019.07.31.09.38.57 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 31 Jul 2019 09:38:57 -0700 (PDT) Received-SPF: pass (google.com: domain of newlib-return-17097-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b="G/yL0bQd"; dkim=pass header.i=@gmail.com header.s=20161025 header.b="d3fg/FZE"; spf=pass (google.com: domain of newlib-return-17097-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom="newlib-return-17097-patch=linaro.org@sourceware.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references; q=dns; s=default; b=lj9wtyFT9TFYpRhxVpgwZiI7mo/TRcS ddTXI+XY+6Pz/fvJDXWHWlaFG5e7f3IytSOVXEQO+MDEGxTxAIgFd3DsGN9KLhdr 0uIJsJtdq9HIq1zdxVW0tIYqGJfysIoB21Ti3K/X6D8c9h2rNv0stSTYSwbZihas JO6jd/YiEmuk= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references; s=default; bh=rG0ENFvHcIIYzf/hnlKaTDaGq8c=; b=G/yL0 bQdKerElzoMZuHfTFcgqjgiYtC4C+8J2ZjHfiSiZ8i8z43PqBFPQEmcnLH3Rptn2 wLMOZiYLAffEciq/4dqu2mdSI5fsNKV+uLj94K+qXHoMYuhosGIG+eqmqBc9ouCz 0JzcoPmfaYY+vl1B8eiHga/bZTDRkBysOioS4I= Received: (qmail 75861 invoked by alias); 31 Jul 2019 16:38:39 -0000 Mailing-List: contact newlib-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: newlib-owner@sourceware.org Delivered-To: mailing list newlib@sourceware.org Received: (qmail 75779 invoked by uid 89); 31 Jul 2019 16:38:39 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=seeks, write-only X-HELO: mail-lj1-f193.google.com Received: from mail-lj1-f193.google.com (HELO mail-lj1-f193.google.com) (209.85.208.193) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 31 Jul 2019 16:38:36 +0000 Received: by mail-lj1-f193.google.com with SMTP id r9so66269144ljg.5 for ; Wed, 31 Jul 2019 09:38:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=zf8DTyzgoE5H9rFIy8QeU1jb01b5yeCVnpXDYlHox+Q=; b=d3fg/FZEiHVwG0o2RctaH2UszAyW1n+ZF8+h/OJZukYUBnxXabGhHMnHEWL4aTEnrr YFycytzdLLsvYL2YQnoLLaedjMarbnI3e8o4hv4PlzWqdezeeVtQVlPRbFr/IhylQ9QA lzdUKU2yNWxsPbIHoKbVW7o48+knj1KCShAFwEXTjj5JeifGjJoaWnzX3GuaHu75LdKy NLlhXi4n9K8ddoShFE9F3sjSRH+rad4Rsh30O+tEaiLs9thsmeHBmIfVZxdKxeXMd2UX CO/WKoTPz34TSANqHc5b+9PX2SsZiF7gd2eF8zrkssi4upAY4FCghrt6oXKLdlN5Yv4H 3Igw== Return-Path: Received: from af-ubuntu18-hyperv.cmtknet.ru (relay.cmtk.ru. [195.5.145.226]) by smtp.gmail.com with ESMTPSA id q4sm16001413lje.99.2019.07.31.09.38.33 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 31 Jul 2019 09:38:33 -0700 (PDT) From: Alexander Fedotov To: Richard.Earnshaw@arm.com, newlib@sourceware.org Cc: Alexander Fedotov Subject: [PATCH v1 3/3] Minor fixes, alignments and cleanup Date: Wed, 31 Jul 2019 11:38:05 -0500 Message-Id: <20190731163805.28834-3-alfedotov@gmail.com> In-Reply-To: <20190731163805.28834-1-alfedotov@gmail.com> References: <20190731163805.28834-1-alfedotov@gmail.com> --- libgloss/arm/crt0.S | 2 +- libgloss/arm/syscalls.c | 106 ++++++++++++++------------------- newlib/libc/sys/arm/arm.h | 2 +- newlib/libc/sys/arm/syscalls.c | 50 +++++++++++----- 4 files changed, 82 insertions(+), 78 deletions(-) -- 2.17.1 diff --git a/libgloss/arm/crt0.S b/libgloss/arm/crt0.S index 3e740c654..8490bde2f 100644 --- a/libgloss/arm/crt0.S +++ b/libgloss/arm/crt0.S @@ -440,7 +440,7 @@ __change_mode: beq .LC10 /* See whether we are scanning a string. */ - cmp r3, #'"' + cmp r3, #'\"' #ifdef __thumb__ beq .LC20 cmp r3, #'\'' diff --git a/libgloss/arm/syscalls.c b/libgloss/arm/syscalls.c index 3605e0fd0..fc394f94b 100644 --- a/libgloss/arm/syscalls.c +++ b/libgloss/arm/syscalls.c @@ -18,30 +18,30 @@ #include "swi.h" /* Forward prototypes. */ -int _system (const char *); -int _rename (const char *, const char *); -int _isatty (int); +int _system (const char *); +int _rename (const char *, const char *); +int _isatty (int); clock_t _times (struct tms *); -int _gettimeofday (struct timeval *, void *); -int _unlink (const char *); -int _link (const char *, const char *); -int _stat (const char *, struct stat *); -int _fstat (int, struct stat *); +int _gettimeofday (struct timeval *, void *); +int _unlink (const char *); +int _link (const char *, const char *); +int _stat (const char *, struct stat *); +int _fstat (int, struct stat *); int _swistat (int fd, struct stat * st); -void * _sbrk (ptrdiff_t); -pid_t _getpid (void); -int _close (int); -clock_t _clock (void); -int _swiclose (int); -int _open (const char *, int, ...); -int _swiopen (const char *, int); -int _write (int, const void *, size_t); -int _swiwrite (int, const void *, size_t); -_off_t _lseek (int, _off_t, int); -_off_t _swilseek (int, _off_t, int); -int _read (int, void *, size_t); -int _swiread (int, void *, size_t); -void initialise_monitor_handles (void); +void * _sbrk (ptrdiff_t); +pid_t _getpid (void); +int _close (int); +clock_t _clock (void); +int _swiclose (int); +int _open (const char *, int, ...); +int _swiopen (const char *, int); +int _write (int, const void *, size_t); +int _swiwrite (int, const void *, size_t); +_off_t _lseek (int, _off_t, int); +_off_t _swilseek (int, _off_t, int); +int _read (int, void *, size_t); +int _swiread (int, void *, size_t); +void initialise_monitor_handles (void); static int checkerror (int); static int error (int); @@ -143,7 +143,7 @@ initialise_monitor_handles (void) int i; /* Open the standard file descriptors by opening the special - * teletype device, ":tt", read-only to obtain a descritpor for + * teletype device, ":tt", read-only to obtain a descriptor for * standard input and write-only to obtain a descriptor for standard * output. Finally, open ":tt" in append mode to obtain a descriptor * for standard error. Since this is a write mode, most kernels will @@ -154,7 +154,7 @@ initialise_monitor_handles (void) #ifdef ARM_RDI_MONITOR int volatile block[3]; - + block[0] = (int) ":tt"; block[2] = 3; /* length of filename */ block[1] = 0; /* mode "r" */ @@ -351,17 +351,15 @@ checkerror (int result) len, is the length in bytes to read. Returns the number of bytes *not* written. */ int -_swiread (int fh, - void * ptr, - size_t len) +_swiread (int fh, void * ptr, size_t len) { #ifdef ARM_RDI_MONITOR int block[3]; - + block[0] = fh; block[1] = (int) ptr; block[2] = (int) len; - + return checkerror (do_AngelSWI (AngelSWI_Reason_Read, block)); #else register int r0 asm("r0"); @@ -381,9 +379,7 @@ _swiread (int fh, Translates the return of _swiread into bytes read. */ int __attribute__((weak)) -_read (int fd, - void * ptr, - size_t len) +_read (int fd, void * ptr, size_t len) { int res; struct fdent *pfd; @@ -409,9 +405,7 @@ _read (int fd, /* fd, is a user file descriptor. */ off_t -_swilseek (int fd, - off_t ptr, - int dir) +_swilseek (int fd, off_t ptr, int dir) { off_t res; struct fdent *pfd; @@ -447,7 +441,7 @@ _swilseek (int fd, } dir = SEEK_SET; } - + #ifdef ARM_RDI_MONITOR int block[2]; if (dir == SEEK_END) @@ -458,7 +452,7 @@ _swilseek (int fd, return -1; ptr += res; } - + /* This code only does absolute seeks. */ block[0] = pfd->handle; block[1] = (int) ptr; @@ -494,9 +488,7 @@ _swilseek (int fd, } off_t -_lseek (int fd, - off_t ptr, - int dir) +_lseek (int fd, off_t ptr, int dir) { return _swilseek (fd, ptr, dir); } @@ -504,18 +496,15 @@ _lseek (int fd, /* fh, is a valid internal file handle. Returns the number of bytes *not* written. */ int -_swiwrite ( - int fh, - const void * ptr, - size_t len) +_swiwrite (int fh, const void * ptr, size_t len) { #ifdef ARM_RDI_MONITOR int block[3]; - + block[0] = fh; block[1] = (int) ptr; block[2] = (int) len; - + return checkerror (do_AngelSWI (AngelSWI_Reason_Write, block)); #else register int r0 asm("r0"); @@ -533,9 +522,7 @@ _swiwrite ( /* fd, is a user file descriptor. */ int __attribute__((weak)) -_write (int fd, - const void * ptr, - size_t len) +_write (int fd, const void * ptr, size_t len) { int res; struct fdent *pfd; @@ -593,7 +580,7 @@ _swiopen (const char * path, int flags) } } - /* The flags are Unix-style, so we need to convert them. */ + /* The flags are Unix-style, so we need to convert them. */ #ifdef O_BINARY if (flags & O_BINARY) aflags |= 1; @@ -611,25 +598,24 @@ _swiopen (const char * path, int flags) if (flags & O_APPEND) { - /* Can't ask for w AND a; means just 'a'. */ - aflags &= ~4; + aflags &= ~4; /* Can't ask for w AND a; means just 'a'. */ aflags |= 8; } - + #ifdef ARM_RDI_MONITOR block[0] = (int) path; block[2] = strlen (path); block[1] = aflags; - + fh = do_AngelSWI (AngelSWI_Reason_Open, block); - + #else asm ("mov r0,%2; mov r1, %3; swi %a1; mov %0, r0" : "=r"(fh) : "i" (SWI_Open),"r"(path),"r"(aflags) : "r0","r1"); #endif - + /* Return a user file descriptor or an error. */ if (fh >= 0) { @@ -784,13 +770,13 @@ _stat (const char *fname, struct stat *st) { int fd, res; memset (st, 0, sizeof (* st)); - /* The best we can do is try to open the file readonly. - If it exists, then we can guess a few things about it. */ + /* The best we can do is try to open the file readonly. If it exists, + then we can guess a few things about it. */ if ((fd = _open (fname, O_RDONLY)) == -1) return -1; st->st_mode |= S_IFREG | S_IREAD; res = _swistat (fd, st); - /* Not interested in the error. */ + /* Not interested in the error. */ _close (fd); return res; } @@ -880,7 +866,7 @@ _times (struct tms * tp) tp->tms_cutime = 0; /* user time, children */ tp->tms_cstime = 0; /* system time, children */ } - + return timeval; }; diff --git a/newlib/libc/sys/arm/arm.h b/newlib/libc/sys/arm/arm.h index dbed81750..10e5b0509 100644 --- a/newlib/libc/sys/arm/arm.h +++ b/newlib/libc/sys/arm/arm.h @@ -85,6 +85,6 @@ #define CPSR_F_MASK 0x40 /* FIQ bit. */ #define CPSR_I_MASK 0x80 /* IRQ bit. */ -#define CPSR_M_MASK 0x0F /* Mode mask except M[4] */ +#define CPSR_M_MASK 0x0F /* Mode mask except M[4]. */ #endif /* _LIBGLOSS_ARM_H */ diff --git a/newlib/libc/sys/arm/syscalls.c b/newlib/libc/sys/arm/syscalls.c index a2997b44c..1f7222980 100644 --- a/newlib/libc/sys/arm/syscalls.c +++ b/newlib/libc/sys/arm/syscalls.c @@ -114,6 +114,16 @@ void initialise_monitor_handles (void) { int i; + + /* Open the standard file descriptors by opening the special + * teletype device, ":tt", read-only to obtain a descriptor for + * standard input and write-only to obtain a descriptor for standard + * output. Finally, open ":tt" in append mode to obtain a descriptor + * for standard error. Since this is a write mode, most kernels will + * probably return the same value as for standard output, but the + * kernel can differentiate the two using the mode flag and return a + * different descriptor for standard error. + */ #ifdef ARM_RDI_MONITOR int volatile block[3]; @@ -163,11 +173,12 @@ get_errno (void) return do_AngelSWI (AngelSWI_Reason_Errno, NULL); #else register int r0 asm("r0"); - asm ("swi %a1" : "=r"(r0): "i" (SWI_GetErrno)); + asm ("swi %a1" : "=r"(r0) : "i" (SWI_GetErrno)); return r0; #endif } +/* Set errno and return result. */ static int error (int result) { @@ -183,7 +194,10 @@ wrap (int result) return result; } -/* Returns # chars not! written. */ +/* file, is a valid user file handle. + ptr, is a null terminated string. + len, is the length in bytes to read. + Returns the number of bytes *not* written. */ int _swiread (int file, void * ptr, size_t len) { @@ -207,6 +221,9 @@ _swiread (int file, void * ptr, size_t len) #endif } +/* file, is a valid user file handle. + Translates the return of _swiread into + bytes read. */ int __attribute__((weak)) _read (int file, void * ptr, size_t len) { @@ -223,15 +240,13 @@ _read (int file, void * ptr, size_t len) return len - x; } +/* file, is a user file descriptor. */ off_t _swilseek (int file, off_t ptr, int dir) { _off_t res; int fh = remap_handle (file); int slot = findslot (fh); -#ifdef ARM_RDI_MONITOR - int block[2]; -#endif if (dir == SEEK_CUR) { @@ -249,6 +264,7 @@ _swilseek (int file, off_t ptr, int dir) } #ifdef ARM_RDI_MONITOR + int block[2]; if (dir == SEEK_END) { block[0] = fh; @@ -294,7 +310,8 @@ _lseek (int file, off_t ptr, int dir) return wrap (_swilseek (file, ptr, dir)); } -/* Returns #chars not! written. */ +/* file, is a valid internal file handle. + Returns the number of bytes *not* written. */ int _swiwrite (int file, const void * ptr, size_t len) { @@ -319,6 +336,7 @@ _swiwrite (int file, const void * ptr, size_t len) #endif } +/* file, is a user file descriptor. */ int __attribute__((weak)) _write (int file, const void * ptr, size_t len) { @@ -366,7 +384,7 @@ _swiopen (const char * path, int flags) if (flags & O_APPEND) { - aflags &= ~4; /* Can't ask for w AND a; means just 'a'. */ + aflags &= ~4; /* Can't ask for w AND a; means just 'a'. */ aflags |= 8; } @@ -527,7 +545,7 @@ _sbrk (ptrdiff_t incr) extern void memset (struct stat *, int, unsigned int); -int +int __attribute__((weak)) _fstat (int file, struct stat * st) { memset (st, 0, sizeof (* st)); @@ -537,7 +555,8 @@ _fstat (int file, struct stat * st) file = file; } -int _stat (const char *fname, struct stat *st) +int __attribute__((weak)) +_stat (const char *fname, struct stat *st) { int file; @@ -553,20 +572,19 @@ int _stat (const char *fname, struct stat *st) return 0; } -int -_link (const char *__path1 __attribute__ ((unused)), - const char *__path2 __attribute__ ((unused))) +int __attribute__((weak)) +_link (const char *__path1 __attribute__ ((unused)), const char *__path2 __attribute__ ((unused))) { errno = ENOSYS; return -1; } int -_unlink (const char *path __attribute__ ((unused))) +_unlink (const char *path) { #ifdef ARM_RDI_MONITOR int block[2]; - block[0] = (int) path; + block[0] = (int)path; block[1] = strlen(path); return wrap (do_AngelSWI (AngelSWI_Reason_Remove, block)) ? -1 : 0; #else @@ -659,13 +677,13 @@ _system (const char *s) meaning to its return value. Try to do something reasonable.... */ if (!s) return 1; /* maybe there is a shell available? we can hope. :-P */ - block[0] = (int) s; + block[0] = (int)s; block[1] = strlen (s); e = wrap (do_AngelSWI (AngelSWI_Reason_System, block)); if ((e >= 0) && (e < 256)) { /* We have to convert e, an exit status to the encoded status of - the command. To avoid hard coding the exit status, we simply + the command. To avoid hard coding the exit status, we simply loop until we find the right position. */ int exit_code;