From patchwork Wed Nov 18 19:55:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 41126 X-Patchwork-Delegate: tuliom@linux.vnet.ibm.com Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 510EA3949D80; Wed, 18 Nov 2020 19:56:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 510EA3949D80 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1605729402; bh=uyYIBDULqgqouivg5fMOmOE9dwkM2TrMmpY1eIbNfIQ=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=NM2HKKdrQVFtR2U0qLGQoP1TY2tlyBHoGutEVbO03aij+1CM5984VBKDqrbwq3D25 bIFAvb3qTU2UYpWVpe2WPCNINcSUujbNFgFFrrt/6aHn4+ernwbJdcXW8UrdiAPbgX keIXvLKnEoC3UI/Pd4tw+oWfDDJUVAWY12dDWOyE= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by sourceware.org (Postfix) with ESMTPS id 59737394742B for ; Wed, 18 Nov 2020 19:56:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 59737394742B Received: by mail-qk1-x743.google.com with SMTP id v143so3107119qkb.2 for ; Wed, 18 Nov 2020 11:56:36 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=uyYIBDULqgqouivg5fMOmOE9dwkM2TrMmpY1eIbNfIQ=; b=WrQo/v6nBsbxsD+ZvpORNtF9EoXqDlwYmKBbthJnkv9Kqg+QeAoG01pOLLTxk1060E DXVY/tS8kNm/YRcCBB8hTyfuY0IUtLu9vqi7CdMfEt4ipx84JF2JW/JHmBJAxgytECax RojEEBrpooJOtTdr6RNIfgWjmFZbfI26ijKKs9dEqXVOi3nblFphmLFioHtnq6AracV6 zKkMbfKM/FzZIgaptzOA2vlylQrX9lNb4+2cxzerJMjYW7ii6ruke+Mevvc0dfPNV130 6qhrmlI0Vy1HeTk4Qn/3PaiUY2ghRwAN7KT1P0Z1h0GG7ewHXTY9SSltrrt9NQz6o00p tvZw== X-Gm-Message-State: AOAM532hwJecQywqnRvSvNQFqymr+plFah7mZbGxt0qz9/KdKXxIyXC0 gLIbTDhC4uFNz8Xs6zfCD/JgAHcGnxQgGA== X-Google-Smtp-Source: ABdhPJwERkCS3ZPtzO8OS6t4CZQGyQPvkOjCDP7pL+n4XLsz6yzHoRd+8KKGsjoVVn/1ckV2kJNbYw== X-Received: by 2002:a37:9f14:: with SMTP id i20mr6259852qke.137.1605729394641; Wed, 18 Nov 2020 11:56:34 -0800 (PST) Received: from localhost.localdomain ([177.194.48.209]) by smtp.googlemail.com with ESMTPSA id f27sm6538775qtv.95.2020.11.18.11.56.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Nov 2020 11:56:34 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH 26/28] linux: Consolidate brk implementation Date: Wed, 18 Nov 2020 16:55:50 -0300 Message-Id: <20201118195552.2687336-27-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201118195552.2687336-1-adhemerval.zanella@linaro.org> References: <20201118195552.2687336-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-13.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" It removes all the arch-specific assembly implementation. The only outlier is alpha where its kernel ABI to return error is to return the EINVAL as the returned value instead of address lower than the requested one. Also some ABIs exports an additional ___brk_addr symbol and to handle it an internal HAVE_INTERNAL_BRK_ADDR_SYMBOL. Checked on x86_64-linux-gnu and with build for the affected ABIs. Reviewed-by: Tulio Magno Quites Machado Filho --- sysdeps/unix/sysv/linux/aarch64/sysdep.h | 3 + sysdeps/unix/sysv/linux/alpha/brk.S | 83 -------------- sysdeps/unix/sysv/linux/{arm => alpha}/brk.c | 13 +-- sysdeps/unix/sysv/linux/alpha/dl-brk.S | 1 - sysdeps/unix/sysv/linux/arc/sysdep.h | 3 + sysdeps/unix/sysv/linux/{generic => }/brk.c | 6 +- sysdeps/unix/sysv/linux/csky/sysdep.h | 3 + sysdeps/unix/sysv/linux/dl-brk.c | 5 - sysdeps/unix/sysv/linux/hppa/brk.c | 41 ------- sysdeps/unix/sysv/linux/i386/brk.c | 45 -------- sysdeps/unix/sysv/linux/i386/sysdep.h | 3 + sysdeps/unix/sysv/linux/ia64/brk.S | 50 --------- sysdeps/unix/sysv/linux/ia64/dl-brk.S | 1 - sysdeps/unix/sysv/linux/ia64/sysdep.h | 3 + sysdeps/unix/sysv/linux/m68k/brk.c | 46 -------- sysdeps/unix/sysv/linux/m68k/sysdep.h | 3 + sysdeps/unix/sysv/linux/microblaze/brk.c | 42 ------- sysdeps/unix/sysv/linux/microblaze/sysdep.h | 3 + sysdeps/unix/sysv/linux/mips/brk.c | 46 -------- sysdeps/unix/sysv/linux/mips/mips32/sysdep.h | 3 + sysdeps/unix/sysv/linux/mips/mips64/sysdep.h | 3 + sysdeps/unix/sysv/linux/nios2/sysdep.h | 3 + sysdeps/unix/sysv/linux/pipe.c | 2 +- sysdeps/unix/sysv/linux/powerpc/dl-brk.S | 1 - .../unix/sysv/linux/powerpc/powerpc32/brk.S | 52 --------- .../unix/sysv/linux/powerpc/powerpc64/brk.S | 43 -------- sysdeps/unix/sysv/linux/riscv/sysdep.h | 3 + sysdeps/unix/sysv/linux/s390/brk.c | 55 --------- sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h | 5 + sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h | 5 + sysdeps/unix/sysv/linux/sh/brk.c | 47 -------- sysdeps/unix/sysv/linux/sparc/sparc32/brk.c | 54 --------- .../unix/sysv/linux/sparc/sparc32/sysdep.h | 3 + sysdeps/unix/sysv/linux/sparc/sparc64/brk.S | 104 ------------------ .../unix/sysv/linux/sparc/sparc64/dl-brk.S | 1 - sysdeps/unix/sysv/linux/sysdep.h | 4 + sysdeps/unix/sysv/linux/x86_64/brk.c | 41 ------- 37 files changed, 60 insertions(+), 769 deletions(-) delete mode 100644 sysdeps/unix/sysv/linux/alpha/brk.S rename sysdeps/unix/sysv/linux/{arm => alpha}/brk.c (77%) delete mode 100644 sysdeps/unix/sysv/linux/alpha/dl-brk.S rename sysdeps/unix/sysv/linux/{generic => }/brk.c (90%) delete mode 100644 sysdeps/unix/sysv/linux/dl-brk.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/brk.c delete mode 100644 sysdeps/unix/sysv/linux/i386/brk.c delete mode 100644 sysdeps/unix/sysv/linux/ia64/brk.S delete mode 100644 sysdeps/unix/sysv/linux/ia64/dl-brk.S delete mode 100644 sysdeps/unix/sysv/linux/m68k/brk.c delete mode 100644 sysdeps/unix/sysv/linux/microblaze/brk.c delete mode 100644 sysdeps/unix/sysv/linux/mips/brk.c delete mode 100644 sysdeps/unix/sysv/linux/powerpc/dl-brk.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S delete mode 100644 sysdeps/unix/sysv/linux/s390/brk.c delete mode 100644 sysdeps/unix/sysv/linux/sh/brk.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/brk.c delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/brk.S delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/dl-brk.S delete mode 100644 sysdeps/unix/sysv/linux/x86_64/brk.c diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep.h b/sysdeps/unix/sysv/linux/aarch64/sysdep.h index 319a7c7ac5..e526328ea4 100644 --- a/sysdeps/unix/sysv/linux/aarch64/sysdep.h +++ b/sysdeps/unix/sysv/linux/aarch64/sysdep.h @@ -234,6 +234,9 @@ # define INTERNAL_SYSCALL_NCS(number, nr, args...) \ INTERNAL_SYSCALL_RAW (number, nr, args) +#undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +#define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + #endif /* __ASSEMBLER__ */ /* Pointer mangling is supported for AArch64. */ diff --git a/sysdeps/unix/sysv/linux/alpha/brk.S b/sysdeps/unix/sysv/linux/alpha/brk.S deleted file mode 100644 index 5596b346d8..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/brk.S +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright (C) 1993-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Brendan Kehoe , 1993. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* __brk is a special syscall under Linux since it never returns an - error. Instead, the error condition is indicated by returning the old - break value (instead of the new, requested one). */ - -#include -#include - -#ifdef PIC -.section .bss - .align 3 - .globl __curbrk -__curbrk: .skip 8 - .type __curbrk,@object - .size __curbrk,8 -#else -.comm __curbrk, 8 -#endif - - .text - .align 4 - .globl __brk - .ent __brk - .usepv __brk, std - - cfi_startproc -__brk: - ldgp gp, 0(t12) - subq sp, 16, sp - cfi_adjust_cfa_offset (16) -#ifdef PROF - .set noat - lda AT, _mcount - jsr AT, (AT), _mcount - .set at -#endif - - /* Save the requested brk across the system call. */ - stq a0, 0(sp) - - ldiq v0, __NR_brk - call_pal PAL_callsys - - ldq a0, 0(sp) - addq sp, 16, sp - cfi_adjust_cfa_offset (-16) - - /* Be prepared for an OSF-style brk. */ - bne a3, SYSCALL_ERROR_LABEL - beq v0, $ok - - /* Correctly handle the brk(0) query case. */ - cmoveq a0, v0, a0 - xor a0, v0, t0 - lda v0, ENOMEM - bne t0, SYSCALL_ERROR_LABEL - - /* Update __curbrk and return cleanly. */ - lda v0, 0 -$ok: stq a0, __curbrk - ret - -PSEUDO_END(__brk) - cfi_endproc - -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/arm/brk.c b/sysdeps/unix/sysv/linux/alpha/brk.c similarity index 77% rename from sysdeps/unix/sysv/linux/arm/brk.c rename to sysdeps/unix/sysv/linux/alpha/brk.c index d4878939ae..d105a50724 100644 --- a/sysdeps/unix/sysv/linux/arm/brk.c +++ b/sysdeps/unix/sysv/linux/alpha/brk.c @@ -1,5 +1,5 @@ -/* brk system call for Linux/ARM. - Copyright (C) 1995-2020 Free Software Foundation, Inc. +/* Change data segment size. Linux/Alpha. + Copyright (C) 2020 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -20,17 +20,14 @@ #include #include -/* This must be initialized data because commons can't have aliases. */ void *__curbrk = 0; int __brk (void *addr) { - void *newbrk; - - __curbrk = newbrk = (void *) INLINE_SYSCALL (brk, 1, addr); - - if (newbrk < addr) + /* Alpha brk returns -ENOMEM in case of failure. */ + __curbrk = (void *) INTERNAL_SYSCALL_CALL (brk, addr); + if ((unsigned long) __curbrk == -ENOMEM) { __set_errno (ENOMEM); return -1; diff --git a/sysdeps/unix/sysv/linux/alpha/dl-brk.S b/sysdeps/unix/sysv/linux/alpha/dl-brk.S deleted file mode 100644 index eeb96544e3..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/dl-brk.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/arc/sysdep.h b/sysdeps/unix/sysv/linux/arc/sysdep.h index 8465a2f623..24d8866d66 100644 --- a/sysdeps/unix/sysv/linux/arc/sysdep.h +++ b/sysdeps/unix/sysv/linux/arc/sysdep.h @@ -221,6 +221,9 @@ hidden_proto (__syscall_error) # define PTR_MANGLE(var) (void) (var) # define PTR_DEMANGLE(var) (void) (var) +# undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +# define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + #endif /* !__ASSEMBLER__ */ #endif /* linux/arc/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/generic/brk.c b/sysdeps/unix/sysv/linux/brk.c similarity index 90% rename from sysdeps/unix/sysv/linux/generic/brk.c rename to sysdeps/unix/sysv/linux/brk.c index 40a80ab970..0b6d6d0b70 100644 --- a/sysdeps/unix/sysv/linux/generic/brk.c +++ b/sysdeps/unix/sysv/linux/brk.c @@ -1,6 +1,6 @@ -/* Copyright (C) 2011-2020 Free Software Foundation, Inc. +/* Change data segment. Linux generic version. + Copyright (C) 2020 Free Software Foundation, Inc. This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -23,10 +23,12 @@ /* This must be initialized data because commons can't have aliases. */ void *__curbrk = 0; +#if HAVE_INTERNAL_BRK_ADDR_SYMBOL /* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt to work around different old braindamage in the old Linux ELF dynamic linker. */ weak_alias (__curbrk, ___brk_addr) +#endif int __brk (void *addr) diff --git a/sysdeps/unix/sysv/linux/csky/sysdep.h b/sysdeps/unix/sysv/linux/csky/sysdep.h index 7e8e89dd42..92216572a6 100644 --- a/sysdeps/unix/sysv/linux/csky/sysdep.h +++ b/sysdeps/unix/sysv/linux/csky/sysdep.h @@ -461,6 +461,9 @@ __local_syscall_error: \ # define INTERNAL_SYSCALL_NCS(number, nr, args...) \ INTERNAL_SYSCALL_RAW##nr (number, args) +#undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +#define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + #endif /* __ASSEMBLER__ */ /* Pointer mangling support. */ diff --git a/sysdeps/unix/sysv/linux/dl-brk.c b/sysdeps/unix/sysv/linux/dl-brk.c deleted file mode 100644 index c37cdfec33..0000000000 --- a/sysdeps/unix/sysv/linux/dl-brk.c +++ /dev/null @@ -1,5 +0,0 @@ -/* We can use the normal code but we also know the __curbrk is not exported - from ld.so. */ -extern void *__curbrk attribute_hidden; - -#include diff --git a/sysdeps/unix/sysv/linux/hppa/brk.c b/sysdeps/unix/sysv/linux/hppa/brk.c deleted file mode 100644 index 89d1fd1835..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/brk.c +++ /dev/null @@ -1,41 +0,0 @@ -/* brk system call for Linux/HPPA. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -int -__brk (void *addr) -{ - void *newbrk; - - __curbrk = newbrk = (void *) INLINE_SYSCALL (brk, 1, addr); - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/i386/brk.c b/sysdeps/unix/sysv/linux/i386/brk.c deleted file mode 100644 index 021b6d37a0..0000000000 --- a/sysdeps/unix/sysv/linux/i386/brk.c +++ /dev/null @@ -1,45 +0,0 @@ -/* brk system call for Linux/i386. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if BUILD_PIE_DEFAULT -/* Can't use "call *%gs:SYSINFO_OFFSET" during statup in static PIE. */ -# define I386_USE_SYSENTER 0 -#endif - -#include -#include -#include - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt - to work around different old braindamage in the old Linux ELF dynamic - linker. */ -weak_alias (__curbrk, ___brk_addr) - -int -__brk (void *addr) -{ - void *newbrk = (void *) INTERNAL_SYSCALL_CALL (brk, addr); - __curbrk = newbrk; - if (newbrk < addr) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (ENOMEM); - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h index bfb5de3b45..addd13dff1 100644 --- a/sysdeps/unix/sysv/linux/i386/sysdep.h +++ b/sysdeps/unix/sysv/linux/i386/sysdep.h @@ -291,6 +291,9 @@ struct libc_do_syscall_args # define HAVE_TIME_VSYSCALL "__vdso_time" # define HAVE_CLOCK_GETRES_VSYSCALL "__vdso_clock_getres" +# undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +# define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + /* Define a macro which expands inline into the wrapper code for a system call. This use is for internal calls that do not need to handle errors normally. It will never touch errno. This returns just what the kernel diff --git a/sysdeps/unix/sysv/linux/ia64/brk.S b/sysdeps/unix/sysv/linux/ia64/brk.S deleted file mode 100644 index 734d3467a7..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/brk.S +++ /dev/null @@ -1,50 +0,0 @@ -/* brk system call for Linux/ia64 - Copyright (C) 1999-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Written by Stéphane Eranian and - Jes Sorensen, , April 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -#include - - .global __curbrk - .type __curbrk,@object - .size __curbrk,8 - .data - .align 8 -__curbrk: - data8 0 - -weak_alias (__curbrk, ___brk_addr) - -LEAF(__brk) - .regstk 1, 0, 0, 0 - DO_CALL(__NR_brk) - cmp.ltu p6, p0 = ret0, in0 - addl r9 = @ltoff(__curbrk), gp - ;; - ld8 r9 = [r9] -(p6) mov ret0 = ENOMEM -(p6) br.cond.spnt.few __syscall_error - ;; - st8 [r9] = ret0 - mov ret0 = 0 - ret -END(__brk) - -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/ia64/dl-brk.S b/sysdeps/unix/sysv/linux/ia64/dl-brk.S deleted file mode 100644 index eeb96544e3..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/dl-brk.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep.h b/sysdeps/unix/sysv/linux/ia64/sysdep.h index 03ed52552e..e6bcaabecc 100644 --- a/sysdeps/unix/sysv/linux/ia64/sysdep.h +++ b/sysdeps/unix/sysv/linux/ia64/sysdep.h @@ -172,6 +172,9 @@ #else /* not __ASSEMBLER__ */ +#undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +#define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + #define BREAK_INSN_1(num) "break " #num ";;\n\t" #define BREAK_INSN(num) BREAK_INSN_1(num) diff --git a/sysdeps/unix/sysv/linux/m68k/brk.c b/sysdeps/unix/sysv/linux/m68k/brk.c deleted file mode 100644 index ee88acbdc4..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/brk.c +++ /dev/null @@ -1,46 +0,0 @@ -/* brk system call for Linux/m68k. - Copyright (C) 1996-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -void *__curbrk = 0; - -/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt - to work around different old braindamage in the old Linux/x86 ELF - dynamic linker. Sigh. */ -weak_alias (__curbrk, ___brk_addr) - -int -__brk (void *addr) -{ - void *newbrk; - - newbrk = (void *) INTERNAL_SYSCALL_CALL (brk, addr); - __curbrk = newbrk; - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep.h b/sysdeps/unix/sysv/linux/m68k/sysdep.h index 3e0ab605de..fe7cf5babb 100644 --- a/sysdeps/unix/sysv/linux/m68k/sysdep.h +++ b/sysdeps/unix/sysv/linux/m68k/sysdep.h @@ -292,6 +292,9 @@ SYSCALL_ERROR_LABEL: \ LOAD_REGS_5 #define ASM_ARGS_6 ASM_ARGS_5, "a" (_a0) +#undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +#define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + #endif /* not __ASSEMBLER__ */ /* Pointer mangling is not yet supported for M68K. */ diff --git a/sysdeps/unix/sysv/linux/microblaze/brk.c b/sysdeps/unix/sysv/linux/microblaze/brk.c deleted file mode 100644 index 20c3e625e4..0000000000 --- a/sysdeps/unix/sysv/linux/microblaze/brk.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2011-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt - to work around different old braindamage in the old Linux ELF dynamic - linker. */ -weak_alias (__curbrk, ___brk_addr) - -int -__brk (void *addr) -{ - __curbrk = (void *) INTERNAL_SYSCALL_CALL (brk, addr); - if (__curbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/microblaze/sysdep.h b/sysdeps/unix/sysv/linux/microblaze/sysdep.h index 6fd96adbf0..fb1e648b63 100644 --- a/sysdeps/unix/sysv/linux/microblaze/sysdep.h +++ b/sysdeps/unix/sysv/linux/microblaze/sysdep.h @@ -310,6 +310,9 @@ SYSCALL_ERROR_LABEL_DCL: \ # define SINGLE_THREAD_BY_GLOBAL 1 +#undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +#define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + #endif /* not __ASSEMBLER__ */ #endif /* _LINUX_MICROBLAZE_SYSDEP_H */ diff --git a/sysdeps/unix/sysv/linux/mips/brk.c b/sysdeps/unix/sysv/linux/mips/brk.c deleted file mode 100644 index 0335837948..0000000000 --- a/sysdeps/unix/sysv/linux/mips/brk.c +++ /dev/null @@ -1,46 +0,0 @@ -/* brk system call for Linux/MIPS. - Copyright (C) 2000-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#include -#include -#include - -void *__curbrk = 0; - -/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt - to work around different old braindamage in the old Linux/x86 ELF - dynamic linker. Sigh. */ -weak_alias (__curbrk, ___brk_addr) - -int -__brk (void *addr) -{ - void *newbrk; - - newbrk = (void *) INTERNAL_SYSCALL_CALL (brk, addr); - __curbrk = newbrk; - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h index c5bcd90c25..49856c3249 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h +++ b/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h @@ -43,6 +43,9 @@ #else /* ! __ASSEMBLER__ */ +#undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +#define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + /* Note that the original Linux syscall restart convention required the instruction immediately preceding SYSCALL to initialize $v0 with the syscall number. Then if a restart triggered, $v0 would have been diff --git a/sysdeps/unix/sysv/linux/mips/mips64/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips64/sysdep.h index 1882fe4e73..73816816d5 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/sysdep.h +++ b/sysdeps/unix/sysv/linux/mips/mips64/sysdep.h @@ -41,6 +41,9 @@ #else /* ! __ASSEMBLER__ */ +#undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +#define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + #if _MIPS_SIM == _ABIN32 /* Convert X to a long long, without losing any bits if it is one already or warning if it is a 32-bit pointer. */ diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep.h b/sysdeps/unix/sysv/linux/nios2/sysdep.h index 520c9460a2..51f736fb95 100644 --- a/sysdeps/unix/sysv/linux/nios2/sysdep.h +++ b/sysdeps/unix/sysv/linux/nios2/sysdep.h @@ -219,6 +219,9 @@ #define __SYSCALL_CLOBBERS "memory" +#undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +#define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + #endif /* __ASSEMBLER__ */ /* Pointer mangling support. */ diff --git a/sysdeps/unix/sysv/linux/pipe.c b/sysdeps/unix/sysv/linux/pipe.c index 0ea6ca5842..bc105ba6a7 100644 --- a/sysdeps/unix/sysv/linux/pipe.c +++ b/sysdeps/unix/sysv/linux/pipe.c @@ -26,7 +26,7 @@ int __pipe (int __pipedes[2]) { - return INLINE_SYSCALL_CALL (pipe2, __pipedes, 0); + return INLINE_SYSCALL_CALL (pipe2, (int *) __pipedes, 0); } libc_hidden_def (__pipe) weak_alias (__pipe, pipe) diff --git a/sysdeps/unix/sysv/linux/powerpc/dl-brk.S b/sysdeps/unix/sysv/linux/powerpc/dl-brk.S deleted file mode 100644 index eeb96544e3..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/dl-brk.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S deleted file mode 100644 index f3b960795e..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S +++ /dev/null @@ -1,52 +0,0 @@ -/* brk system call for Linux/ppc. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include - - .comm __curbrk,4,4 - .section ".text" -ENTRY (__brk) - mflr r0 - stwu r1,-16(r1) - cfi_adjust_cfa_offset (16) - stw r3,8(r1) - stw r0,20(r1) - cfi_offset (lr, 4) - DO_CALL(SYS_ify(brk)) - lwz r6,8(r1) -#ifdef PIC - SETUP_GOT_ACCESS(r5,got_label) - addis r5,r5,__curbrk-got_label@ha - stw r3,__curbrk-got_label@l(r5) -#else - lis r4,__curbrk@ha - stw r3,__curbrk@l(r4) -#endif - lwz r0,20(r1) - cmplw r6,r3 - addi r1,r1,16 - mtlr r0 - li r3,0 - blelr+ - li r3,ENOMEM - b __syscall_error@local -END (__brk) - -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S b/sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S deleted file mode 100644 index f206909b72..0000000000 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S +++ /dev/null @@ -1,43 +0,0 @@ -/* brk system call for Linux. PowerPC64 version. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#define _ERRNO_H 1 -#include - - .comm __curbrk,8,8 - .section ".toc","aw" -.LC__curbrk: - .tc __curbrk[TC],__curbrk - .section ".text" -ENTRY (__brk) - CALL_MCOUNT 1 - - std r3,-8(r1) - DO_CALL(SYS_ify(brk)) - ld r6,-8(r1) - ld r5,.LC__curbrk@toc(r2) - std r3,0(r5) - cmpld r6,r3 - li r3,0 - blelr+ - li r3,ENOMEM - TAIL_CALL_SYSCALL_ERROR -END (__brk) - -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/riscv/sysdep.h b/sysdeps/unix/sysv/linux/riscv/sysdep.h index e94afbf106..37ff07a0d7 100644 --- a/sysdeps/unix/sysv/linux/riscv/sysdep.h +++ b/sysdeps/unix/sysv/linux/riscv/sysdep.h @@ -155,6 +155,9 @@ RV64). */ # define HAVE_GETCPU_VSYSCALL "__vdso_getcpu" +# undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +# define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + # define INTERNAL_SYSCALL(name, nr, args...) \ internal_syscall##nr (SYS_ify (name), args) diff --git a/sysdeps/unix/sysv/linux/s390/brk.c b/sysdeps/unix/sysv/linux/s390/brk.c deleted file mode 100644 index ca3a730f83..0000000000 --- a/sysdeps/unix/sysv/linux/s390/brk.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - Copyright (C) 2000-2020 Free Software Foundation, Inc. - Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -void *__curbrk = 0; - -/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt - to work around different old braindamage in the old Linux/x86 ELF - dynamic linker. Sigh. */ -weak_alias (__curbrk, ___brk_addr) - -int -__brk (void *addr) -{ - void *newbrk; - - { - register void *__addr __asm__("2") = addr; - - __asm__ ("svc %b1\n\t" /* call sys_brk */ - : "=d" (__addr) - : "I" (SYS_ify(brk)), "r" (__addr) - : "cc", "memory" ); - newbrk = __addr; - } - __curbrk = newbrk; - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h index 26b0410cf3..26836620f2 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h +++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h @@ -175,6 +175,11 @@ #define ret_ERRVAL \ br 14 +#else + +# undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +# define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + #endif /* __ASSEMBLER__ */ /* Pointer mangling support. */ diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h index 39831a2ec2..7211dadbfd 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h +++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h @@ -173,6 +173,11 @@ #define ret_ERRVAL \ br 14 +#else + +# undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +# define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + #endif /* __ASSEMBLER__ */ /* Pointer mangling support. */ diff --git a/sysdeps/unix/sysv/linux/sh/brk.c b/sysdeps/unix/sysv/linux/sh/brk.c deleted file mode 100644 index 5225d9bfc4..0000000000 --- a/sysdeps/unix/sysv/linux/sh/brk.c +++ /dev/null @@ -1,47 +0,0 @@ -/* brk system call for Linux/SH. - Copyright (C) 1999-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -int -__brk (void *addr) -{ - void *newbrk; - register long r3 asm ("%r3") = SYS_ify (brk); - register long r4 asm ("%r4") = (long)addr; - - asm volatile ("trapa #0x11\n\t" SYSCALL_INST_PAD - : "=z"(newbrk) - : "r" (r3), "r" (r4)); - - __curbrk = newbrk; - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/brk.c b/sysdeps/unix/sysv/linux/sparc/sparc32/brk.c deleted file mode 100644 index ba9a616f74..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/brk.c +++ /dev/null @@ -1,54 +0,0 @@ -/* brk system call for Linux/SPARC. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx) - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt - to work around different old braindamage in the old Linux ELF dynamic - linker. */ -weak_alias (__curbrk, ___brk_addr) - -int -__brk (void *addr) -{ - void *newbrk; - - { - register void *o0 __asm__("%o0") = addr; - register int g1 __asm__("%g1") = __NR_brk; - __asm ("t 0x10" : "=r"(o0) : "r"(g1), "0"(o0) : "cc"); - newbrk = o0; - } - - __curbrk = newbrk; - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h index 2c3754770b..018ee5781e 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h @@ -121,6 +121,9 @@ ENTRY(name); \ "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \ "cc", "memory" +#undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +#define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + #endif /* __ASSEMBLER__ */ /* Pointer mangling support. */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S deleted file mode 100644 index 471da3d268..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright (C) 1997-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Richard Henderson , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -/* __brk is a special syscall under Linux since it never returns an - error. Instead, the error condition is indicated by returning the old - break value (instead of the new, requested one). */ - -#include -#include - -#ifdef PIC -.section .bss - .align 8 - .globl __curbrk -__curbrk: .skip 8 - .type __curbrk,@object - .size __curbrk,8 -#else -.common __curbrk, 8, 8 -#endif - - .text -ENTRY (__brk) - save %sp, -192, %sp - cfi_def_cfa_register(%fp) - cfi_window_save - cfi_register(%o7, %i7) -#ifdef PIC - SETUP_PIC_REG(l7) -#endif - - LOADSYSCALL(brk) - mov %i0, %o0 - - ta 0x6d - - /* All the ways we can fail... */ - bcs,pn %xcc, .Lerr1 - nop - brz,pt %i0, .Lok - subcc %i0, %o0, %g0 - bne,pn %xcc, .Lerr0 - nop - - /* Update __curbrk and return cleanly. */ -.Lok: -#ifndef PIC - sethi %hi(__curbrk), %g1 - or %g1, %lo(__curbrk), %g1 -#else - sethi %gdop_hix22(__curbrk), %g1 - xor %g1, %gdop_lox10(__curbrk), %g1 - ldx [%l7 + %g1], %g1, %gdop(__curbrk) -#endif - stx %o0, [%g1] - mov %g0, %i0 - - /* Don't use "ret" cause the preprocessor will eat it. */ - jmpl %i7+8, %g0 - restore - - /* What a horrible way to die. */ -.Lerr0: set ENOMEM, %o0 -.Lerr1: -#ifndef _LIBC_REENTRANT -#ifndef PIC - sethi %hi(errno), %g1 - or %g1, %lo(errno), %g1 -#else - sethi %gdop_hix22(errno), %g1 - xor %g1, %gdop_lox10(errno), %g1 - ldx [%l7 + %g1], %g1, %gdop(errno) -#endif - st %o0, [%g1] -#else -#if IS_IN (libc) - call HIDDEN_JUMPTARGET(__errno_location) -#else - call __errno_location -#endif - mov %o0,%l1 - st %l1, [%o0] -#endif - sub %g0, 1, %i0 - jmpl %i7+8, %g0 - restore -END (__brk) - -weak_alias (__brk, brk) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/dl-brk.S b/sysdeps/unix/sysv/linux/sparc/sparc64/dl-brk.S deleted file mode 100644 index eeb96544e3..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/dl-brk.S +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/sysdep.h b/sysdeps/unix/sysv/linux/sysdep.h index 71ecc19cd5..736cf52697 100644 --- a/sysdeps/unix/sysv/linux/sysdep.h +++ b/sysdeps/unix/sysv/linux/sysdep.h @@ -99,4 +99,8 @@ it missing due the usage of a old generic version without it). */ #define HAVE_INTERNAL_SEND_SYMBOL 1 +/* Export the ___brk_addr symbol on brk.c implementation (some ABIs export + it due and old crtstuff.c code). */ +#define HAVE_INTERNAL_BRK_ADDR_SYMBOL 0 + #endif /* _SYSDEP_LINUX_H */ diff --git a/sysdeps/unix/sysv/linux/x86_64/brk.c b/sysdeps/unix/sysv/linux/x86_64/brk.c deleted file mode 100644 index fba9278c68..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/brk.c +++ /dev/null @@ -1,41 +0,0 @@ -/* brk system call for Linux/x86_64. - Copyright (C) 1995-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -int -__brk (void *addr) -{ - void *newbrk; - - __curbrk = newbrk = (void *) INLINE_SYSCALL (brk, 1, addr); - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk)