From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id 21CC1385B216 for ; Fri, 15 Apr 2022 01:28:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 21CC1385B216 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn Received: from [10.20.4.187] (unknown [10.20.4.187]) by mail.loongson.cn (Coremail) with SMTP id AQAAf9DxDxI4ylhiX8kjAA--.15534S3; Fri, 15 Apr 2022 09:28:24 +0800 (CST) From: caiyinyu Subject: Re: [PATCH v2 04/14] LoongArch: ABI Implementation To: Adhemerval Zanella , libc-alpha@sourceware.org Cc: xuchenghua@loongson.cn References: <20211231064455.1030051-1-caiyinyu@loongson.cn> <20211231064455.1030051-5-caiyinyu@loongson.cn> <2ee245d3-59af-ce52-c33d-c252527469a1@linaro.org> Message-ID: <67a80d85-7ab3-1d49-5a99-047ffa2a786e@loongson.cn> Date: Fri, 15 Apr 2022 09:28:24 +0800 User-Agent: Mozilla/5.0 (X11; Linux mips64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <2ee245d3-59af-ce52-c33d-c252527469a1@linaro.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-CM-TRANSID: AQAAf9DxDxI4ylhiX8kjAA--.15534S3 X-Coremail-Antispam: 1UD129KBjvJXoW3Zw45Xr4rZF4xAF1UAw47Jwb_yoWkJr4DpF WDCF4UGF4kXw47G34I93W5XF1ftrs3C3WYgryYga1UCw4DJr1xWFs29F98Ga4fJ3s5C3yj vF4DZ3ZrCFs3AaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUvv14x267AKxVWUJVW8JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26F1j6w1UM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4U JVWxJr1l84ACjcxK6I8E87Iv67AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVCY1x0267AKxV WxJr0_GcWle2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4CE5I8CrVC2j2Wl Yx0E2Ix0cI8IcVAFwI0_JF0_Jw1lYx0Ex4A2jsIE14v26r1j6r4UMcvjeVCFs4IE7xkEbV WUJVW8JwACjcxG0xvEwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1lc7I2V7IY0VAS07Al zVAYIcxG8wCY02Avz4vE-syl42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr 1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE 14v26r1Y6r17MIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_JFI_Gr1lIxAIcVC0I7 IYx2IY6xkF7I0E14v26r4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVWUCVW8JwCI42IY6I8E 87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73Uj IFyTuYvjfUYwIDUUUUU X-CM-SenderInfo: 5fdl5xhq1xqz5rrqw2lrqou0/ X-Spam-Status: No, score=-13.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_SHORT, NICE_REPLY_A, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, 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: Fri, 15 Apr 2022 01:28:35 -0000 在 2022/1/4 下午9:46, Adhemerval Zanella 写道: > 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? Fixed by using generic code. >> +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. Fixed by removing gccframe.h. >> 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. Fixed by removing memusage.h >> 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. Fixed. >> +#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. Fixed. >> 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. Removed. >> 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. Removed.