From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1944) id DE3D23853D7A; Wed, 23 Nov 2022 14:44:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DE3D23853D7A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1669214676; bh=5DUTMQk6tUSFTKr4A4dVEvNa04kc0L5/NVwZp4mevHw=; h=From:To:Subject:Date:From; b=ho5GVu1dtBJ2z4XE6GXZ2O/64qFMYP/Ewxhm0m3vw4CufWkKSsp1BSu3EEzwr6qg8 l4KaLYCfJHZ32+2MCE1SYuUe0ClPBviRXQBXsKwPckj/Ev1M2RkiqdYiG3LMdX7FkR 3sN5wsWyD6+kuK2aHxxQYW4IGblTcNSSu7OiLt6c= 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] cheri: change __libc_start_main prototype X-Act-Checkin: glibc X-Git-Author: Szabolcs Nagy X-Git-Refname: refs/heads/arm/morello/main X-Git-Oldrev: 4b5b494ecc84ae128c3680120d2cdf0001ee9867 X-Git-Newrev: 60c96035fff8d1d3e2cc0c2279f8b3c7c0ccb09a Message-Id: <20221123144436.DE3D23853D7A@sourceware.org> Date: Wed, 23 Nov 2022 14:44:36 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=60c96035fff8d1d3e2cc0c2279f8b3c7c0ccb09a commit 60c96035fff8d1d3e2cc0c2279f8b3c7c0ccb09a Author: Szabolcs Nagy Date: Tue Aug 30 10:01:44 2022 +0100 cheri: change __libc_start_main prototype The prototype of __libc_start_main is changed to void __libc_start_main (int main (int, char **, char **, void *), int argc, char **argv, char **envp, void *auxv, void rtld_fini (void), void *sp); so envp is passed down separately and the unused init, fini args are dropped. Diff: --- csu/libc-start.c | 16 +++++++++++ .../unix/sysv/linux/aarch64/morello/libc-start.c | 32 ++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/csu/libc-start.c b/csu/libc-start.c index 543560f36c..09235865bd 100644 --- a/csu/libc-start.c +++ b/csu/libc-start.c @@ -210,11 +210,16 @@ STATIC int LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), int argc, char **argv, +#ifdef LIBC_START_MAIN_ENVP_ARG + char **envp, +#endif #ifdef LIBC_START_MAIN_AUXVEC_ARG ElfW(auxv_t) *auxvec, #endif +#ifndef LIBC_START_MAIN_NO_INITFINI_ARG __typeof (main) init, void (*fini) (void), +#endif void (*rtld_fini) (void), void *stack_end) __attribute__ ((noreturn)); @@ -233,15 +238,24 @@ STATIC int LIBC_START_MAIN (int (*main) (int, char **, char ** STATIC int LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), int argc, char **argv, +#ifdef LIBC_START_MAIN_ENVP_ARG + char **envp, +#endif #ifdef LIBC_START_MAIN_AUXVEC_ARG ElfW(auxv_t) *auxvec, #endif +#ifndef LIBC_START_MAIN_NO_INITFINI_ARG __typeof (main) init, void (*fini) (void), +#endif void (*rtld_fini) (void), void *stack_end) { #ifndef SHARED +#ifdef LIBC_START_MAIN_ENVP_ARG + char **ev = envp; +#else char **ev = &argv[argc + 1]; +#endif __environ = ev; @@ -358,11 +372,13 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0)) GLRO(dl_debug_printf) ("\ninitialize program: %s\n\n", argv[0]); +#ifndef LIBC_START_MAIN_NO_INITFINI_ARG if (init != NULL) /* This is a legacy program which supplied its own init routine. */ (*init) (argc, argv, __environ MAIN_AUXVEC_PARAM); else +#endif /* This is a current program. Use the dynamic segment to find constructors. */ call_init (argc, argv, __environ); diff --git a/sysdeps/unix/sysv/linux/aarch64/morello/libc-start.c b/sysdeps/unix/sysv/linux/aarch64/morello/libc-start.c new file mode 100644 index 0000000000..4b04648054 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/morello/libc-start.c @@ -0,0 +1,32 @@ +/* Override csu/libc-start.c on Morello. + Copyright (C) 2017-2022 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 + . */ + +#ifndef SHARED +# include +# include + +extern struct cpu_features _dl_aarch64_cpu_features; + +# define ARCH_INIT_CPU_FEATURES() init_cpu_features (&_dl_aarch64_cpu_features) +#endif + +#define LIBC_START_MAIN_ENVP_ARG +#define LIBC_START_MAIN_AUXVEC_ARG +#define LIBC_START_MAIN_NO_INITFINI_ARG +#define MAIN_AUXVEC_ARG +#include