From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qv1-xf2f.google.com (mail-qv1-xf2f.google.com [IPv6:2607:f8b0:4864:20::f2f]) by sourceware.org (Postfix) with ESMTPS id 12A983858406 for ; Tue, 4 Jan 2022 13:46:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 12A983858406 Received: by mail-qv1-xf2f.google.com with SMTP id o10so34332008qvc.5 for ; Tue, 04 Jan 2022 05:46:45 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=5DUurjSeSP/oRsJXkTqAExYI03hexChbo2gq9JG0LAI=; b=gomrE+AkRO6za/nzfI5+M4cmf0dPkVO8p4ebnuq1UA6bAFSlHlZmdQsGzwzXTpIAju ZUmWBssSAmDTr+AIl/Cq/Zm9v+meFH1tiq/0Vf4yWRGzdLI1dMl/SBy5fyxD1/7Up10P QAVjAa0ydoIWQ12N2oBFpmNaLzCmJwvvJc/dAf38UuebIa/w938piXf0Ef8oBLlxFC+W sMrD/c29M+A365uLzgDt4uLOTTg8XOXQ4auUKJwpp/f9jRXNFhviimwFZlbYx27p3mDc cczdqdH4la8LrwBDyFPYLxUnFavJQb2TOlzPoDXvcWsuaZHdNGWCtztV6bO6X2VbQ89f zU2w== X-Gm-Message-State: AOAM532Xnc+m6be+JXYi6BL4SDjqja77pDCRf2va1BgbEvR5jdOEApNS XPtP5hzdbKUM8nzjmFTufYXgkbXO/ELs6Q== X-Google-Smtp-Source: ABdhPJxHmmHL9bZTkiEWWsg8DDVe/rD5aPfeKp4xOtCbdL//ck57N9MC+WZgKbH/Sd17t556ZvGYLA== X-Received: by 2002:a0c:f8cc:: with SMTP id h12mr45148936qvo.6.1641304004519; Tue, 04 Jan 2022 05:46:44 -0800 (PST) Received: from ?IPV6:2804:431:c7ca:a350:1960:9a87:fba4:a664? ([2804:431:c7ca:a350:1960:9a87:fba4:a664]) by smtp.gmail.com with ESMTPSA id x1sm31298164qtj.9.2022.01.04.05.46.43 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 04 Jan 2022 05:46:44 -0800 (PST) Message-ID: <2ee245d3-59af-ce52-c33d-c252527469a1@linaro.org> Date: Tue, 4 Jan 2022 10:46:42 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.4.0 Subject: Re: [PATCH v2 04/14] LoongArch: ABI Implementation Content-Language: en-US To: caiyinyu , libc-alpha@sourceware.org Cc: xuchenghua@loongson.cn, joseph_myers@mentor.com References: <20211231064455.1030051-1-caiyinyu@loongson.cn> <20211231064455.1030051-5-caiyinyu@loongson.cn> From: Adhemerval Zanella In-Reply-To: <20211231064455.1030051-5-caiyinyu@loongson.cn> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-13.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_BLACK autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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-List-Received-Date: Tue, 04 Jan 2022 13:46:47 -0000 On 31/12/2021 03:44, caiyinyu wrote: > diff --git a/sysdeps/loongarch/bits/wordsize.h b/sysdeps/loongarch/bits/wordsize.h > new file mode 100644 > index 0000000000..0a83454b08 > --- /dev/null > +++ b/sysdeps/loongarch/bits/wordsize.h > @@ -0,0 +1,25 @@ > +/* Determine the wordsize from the preprocessor defines. > + Copyright (C) 2021 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 > + . */ > + > +#ifdef __LP64__ > +#define __WORDSIZE 64 > +#else > +#define __WORDSIZE 32 > +#endif > + > +#define __WORDSIZE_TIME64_COMPAT32 0 You stated you only supported 64-bit ABI and it should imply in wordsize-64, so why do you need to provide an arch-specific wordsize.h? > +END (_dl_runtime_resolve) > diff --git a/sysdeps/loongarch/gccframe.h b/sysdeps/loongarch/gccframe.h > new file mode 100644 > index 0000000000..19996f3ce3 > --- /dev/null > +++ b/sysdeps/loongarch/gccframe.h > @@ -0,0 +1,21 @@ > +/* Definition of object in frame unwind info. > + Copyright (C) 2021 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 > + . */ > + > +#define FIRST_PSEUDO_REGISTER 74 > + > +#include Why do you need to add it? It is used solely on unwind code used only for compat code on old ABIs. > diff --git a/sysdeps/loongarch/memusage.h b/sysdeps/loongarch/memusage.h > new file mode 100644 > index 0000000000..bdf24bb276 > --- /dev/null > +++ b/sysdeps/loongarch/memusage.h > @@ -0,0 +1,25 @@ > +/* Machine-specific definitions for memory usage profiling. > + Copyright (C) 2021 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 > + . */ > + > +#define GETSP() \ > + ({ \ > + register uintptr_t stack_ptr asm("$sp"); \ > + stack_ptr; \ > + }) > + > +#include There is no need to add this header. > diff --git a/sysdeps/unix/sysv/linux/loongarch/ldconfig.h b/sysdeps/unix/sysv/linux/loongarch/ldconfig.h > new file mode 100644 > index 0000000000..126f0860e9 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/loongarch/ldconfig.h > @@ -0,0 +1,30 @@ > +/* ldconfig default paths and libraries. > + Copyright (C) 2001-2021 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 > + > +#ifdef __loongarch_lp64 > +#define SYSDEP_KNOWN_INTERPRETER_NAMES \ > + { "/lib64/ld-linux-loongarch-lp64d.so.1", FLAG_ELF_LIBC6 }, > +#else > +#error cannot determine ABI > +#endif > + Do you plan to support multilib with different ABIs in the same system? Otherwise I think adding another SYSDEP_KNOWN_INTERPRETER_NAMES does not add much. > +#define SYSDEP_KNOWN_LIBRARY_NAMES \ > + { "libc.so.6", FLAG_ELF_LIBC6 }, \ > + { "libm.so.6", FLAG_ELF_LIBC6 }, > diff --git a/sysdeps/unix/sysv/linux/loongarch/localplt.data b/sysdeps/unix/sysv/linux/loongarch/localplt.data > new file mode 100644 > index 0000000000..817ab2659a > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/loongarch/localplt.data > @@ -0,0 +1,12 @@ > +# See scripts/check-localplt.awk for how this file is processed. > +# PLT use is required for the malloc family and for matherr because > +# users can define their own functions and have library internals call them. > +libc.so: calloc > +libc.so: free > +libc.so: malloc > +libc.so: realloc > +# The TLS-enabled version of these functions is interposed from libc.so. > +ld.so: _dl_signal_error > +ld.so: _dl_catch_error > +ld.so: _dl_signal_exception > +ld.so: _dl_catch_exception I think this file should be moved to the Linux ABI patch. > diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/fpu/jmp_buf-macros.h b/sysdeps/unix/sysv/linux/loongarch/lp64/fpu/jmp_buf-macros.h > new file mode 100644 > index 0000000000..a02865b4a5 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/fpu/jmp_buf-macros.h > @@ -0,0 +1,44 @@ > +/* jump buffer constants for LoongArch. > + Copyright (C) 2021 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 > + . */ > + > +/* Produced by this program: > + > + #include > + #include > + #include > + #include > + > + int main (int argc, char **argv) > + { > + printf ("#define JMP_BUF_SIZE %d\n", sizeof (jmp_buf)); > + printf ("#define JMP_BUF_ALIGN %d\n", __alignof__ (jmp_buf)); > + printf ("#define SIGJMP_BUF_SIZE %d\n", sizeof (sigjmp_buf)); > + printf ("#define SIGJMP_BUF_ALIGN %d\n", __alignof__ (sigjmp_buf)); > + printf ("#define MASK_WAS_SAVED_OFFSET %d\n", > + offsetof (struct __jmp_buf_tag, __mask_was_saved)); > + printf ("#define SAVED_MASK_OFFSET %d\n", > + offsetof (struct __jmp_buf_tag, __saved_mask)); > + } */ > + > +#define JMP_BUF_SIZE 304 > +#define JMP_BUF_ALIGN 8 > +#define SIGJMP_BUF_SIZE 304 > +#define SIGJMP_BUF_ALIGN 8 > +#define MASK_WAS_SAVED_OFFSET 168 > +#define SAVED_MASK_OFFSET 176 Same as before. > diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/nofpu/jmp_buf-macros.h b/sysdeps/unix/sysv/linux/loongarch/lp64/nofpu/jmp_buf-macros.h > new file mode 100644 > index 0000000000..835df05ce5 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/nofpu/jmp_buf-macros.h > @@ -0,0 +1,41 @@ > +/* Copyright (C) 2020-2021 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 > + . */ > + > +/* Produced by this program: > + > + #include > + #include > + #include > + #include > + > + int main (int argc, char **argv) > + { > + printf ("#define JMP_BUF_SIZE %d\n", sizeof (jmp_buf)); > + printf ("#define JMP_BUF_ALIGN %d\n", __alignof__ (jmp_buf)); > + printf ("#define SIGJMP_BUF_SIZE %d\n", sizeof (sigjmp_buf)); > + printf ("#define SIGJMP_BUF_ALIGN %d\n", __alignof__ (sigjmp_buf)); > + printf ("#define MASK_WAS_SAVED_OFFSET %d\n", offsetof (struct __jmp_buf_tag, __mask_was_saved)); > + printf ("#define SAVED_MASK_OFFSET %d\n", offsetof (struct __jmp_buf_tag, __saved_mask)); > + } */ > + > +# define JMP_BUF_SIZE 240 > +# define JMP_BUF_ALIGN 8 > +# define SIGJMP_BUF_SIZE 240 > +# define SIGJMP_BUF_ALIGN 8 > +# define MASK_WAS_SAVED_OFFSET 104 > +# define SAVED_MASK_OFFSET 112 Same as before.