From patchwork Sat Jul 31 15:13:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 44544 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 4A54C3860C3F for ; Sat, 31 Jul 2021 15:13:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4A54C3860C3F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1627744432; bh=3ZctOaXo0FIktARUjUdnQv2Fcu0o2+Fh4NxiMhquhkY=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=lNBFS+vhEJ+haN/hCPQYMQvvkLLYP/eJiaRTE3oGx3SM7DailFwXppH2q6jj3Ib00 i/VgRACP5jRw5ntsT9YLO+Sgzz2MjAS01vTsKx+dCeCMYHczCWWSf/yDS1g3CJqKPo 8oimBVK6q/T4g/xC+HfmOjQ+COiyCxolSyLtMChg= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) by sourceware.org (Postfix) with ESMTPS id 34DDA3858026 for ; Sat, 31 Jul 2021 15:13:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 34DDA3858026 Received: by mail-pl1-x631.google.com with SMTP id c16so14585311plh.7 for ; Sat, 31 Jul 2021 08:13:29 -0700 (PDT) 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:mime-version :content-transfer-encoding; bh=3ZctOaXo0FIktARUjUdnQv2Fcu0o2+Fh4NxiMhquhkY=; b=Q25PRpPgKbDnQWxv6NVcGDP9Lct+YvaEFnjVgurCq98Wm9M3LS6xjSdCXz24Up+o/5 K0gtqeSg2d9ALPcnEQM2TavnkOjN9Ty1j6Kb/+ho2a8rtzqX8NCA6e7tze1V13djPFZu niZWLYrMVfTq+hmc0YzfpvpYcFmHVstGLbS3TJs5rg3NZdFefkxB5fXGUHk4g2/C2GS3 luqpafJbHdgnsk5u+SmVSVQW0zt2PiGGoynY/7W7X7WRNZkEYd+atviqdFdJnH/Ja5Qr jYBEtYV9dkROOrRiGl3vyvxAgUYlvmc1sUoqA8t3Ov4jYbyv0nsCLo+UC50GJkG1VbbY u78A== X-Gm-Message-State: AOAM530ETOsWgB1c2HW0p2Cm7HN9BR2KNCs70oN1/X/cq1hsa98cPlCj vhuRCd1WlulmN/z8paBZ/AZnopjYkuE= X-Google-Smtp-Source: ABdhPJxr1HkQJxSgE6DW1naL7im/rGLJVCw80byld1a2GytC9V8JH5Q/oclkkf6hYA7DvNv8lPqfMg== X-Received: by 2002:a63:b4d:: with SMTP id a13mr4213945pgl.404.1627744407937; Sat, 31 Jul 2021 08:13:27 -0700 (PDT) Received: from gnu-cfl-2.localdomain ([172.58.38.240]) by smtp.gmail.com with ESMTPSA id s50sm5975709pfw.212.2021.07.31.08.13.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 31 Jul 2021 08:13:27 -0700 (PDT) Received: from gnu-tgl-2.localdomain (gnu-tgl-2 [192.168.1.34]) by gnu-cfl-2.localdomain (Postfix) with ESMTPS id 376E8C02CB for ; Sat, 31 Jul 2021 08:13:26 -0700 (PDT) Received: from gnu-tgl-2.lan (localhost [IPv6:::1]) by gnu-tgl-2.localdomain (Postfix) with ESMTP id 1F2B13002C2 for ; Sat, 31 Jul 2021 08:13:16 -0700 (PDT) To: libc-alpha@sourceware.org Subject: [PATCH v2] Place ENTRY_POINT in .text.unlikely section [BZ #28153] Date: Sat, 31 Jul 2021 08:13:16 -0700 Message-Id: <20210731151316.1659316-1-hjl.tools@gmail.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-Spam-Status: No, score=-3033.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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-Patchwork-Original-From: "H.J. Lu via Libc-alpha" From: "H.J. Lu" Reply-To: "H.J. Lu" Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Glibc assumes that ENTRY_POINT is the lowest address for which we need to keep profiling records and BFD linker uses a linker script to place the input sections. Since GCC 4.6, the main function is placed in .text.startup section and since binutils 2.22, BFD linker with commit add44f8d5c5c05e08b11e033127a744d61c26aee Author: Alan Modra Date: Thu Nov 25 03:03:02 2010 +0000 * scripttempl/elf.sc: Group .text.exit, text.startup and .text.hot sections. places .text.startup section before .text section. Because ENTRY_POINT in gcrt1.o, which is passed to the linker first, is placed in .text section, linker may place the main function below ENTRY_POINT, which leaves the main function out of profiling records. Place ENTRY_POINT in .text.unlikely section so that when GNU binutils 2.20 or newer with commit 4c4fb5dac57a7cc4704fffb1f2fc11634dccc833 Author: Alan Modra Date: Fri Sep 4 06:35:29 2009 +0000 * scripttempl/elf.sc (.text): Add cold text sections. is used, BFD linker places ENTRY_POINT at the lowest address. This fixes [BZ #28153]. Tested on Linux/x86-64, Linux/x32 and Linux/i686 as well as with build-many-glibcs.py. --- gmon/tst-gmon-gprof.sh | 2 ++ gmon/tst-gmon-static-gprof.sh | 2 ++ sysdeps/aarch64/start.S | 2 +- sysdeps/alpha/start.S | 2 +- sysdeps/arc/start.S | 1 + sysdeps/arm/start.S | 2 +- sysdeps/csky/abiv2/start.S | 2 +- sysdeps/hppa/start.S | 2 +- sysdeps/i386/start.S | 1 + sysdeps/ia64/start.S | 1 + sysdeps/m68k/start.S | 2 +- sysdeps/microblaze/start.S | 2 +- sysdeps/mips/start.S | 2 +- sysdeps/nios2/start.S | 2 +- sysdeps/powerpc/powerpc32/start.S | 2 +- sysdeps/powerpc/powerpc64/start.S | 2 +- sysdeps/riscv/start.S | 1 + sysdeps/s390/s390-32/start.S | 2 +- sysdeps/s390/s390-64/start.S | 2 +- sysdeps/sh/start.S | 2 +- sysdeps/sparc/sparc32/start.S | 2 +- sysdeps/sparc/sparc64/start.S | 2 +- sysdeps/x86_64/start.S | 1 + 23 files changed, 25 insertions(+), 16 deletions(-) diff --git a/gmon/tst-gmon-gprof.sh b/gmon/tst-gmon-gprof.sh index 9d371582b9..dc0be02110 100644 --- a/gmon/tst-gmon-gprof.sh +++ b/gmon/tst-gmon-gprof.sh @@ -39,12 +39,14 @@ trap cleanup 0 cat > "$expected" < "$expected_dot" < "$expected" < "$expected_dot" < - .text + .section .text.unlikely,"ax",%progbits .align 3 .globl _start .ent _start, 0 diff --git a/sysdeps/arc/start.S b/sysdeps/arc/start.S index 5302a57cab..aca293faf9 100644 --- a/sysdeps/arc/start.S +++ b/sysdeps/arc/start.S @@ -33,6 +33,7 @@ env[0...N] environment variables (pointers) NULL. */ + .section .text.unlikely,"ax",%progbits ENTRY (ENTRY_POINT) /* Needed to make gdb backtraces stop here. */ diff --git a/sysdeps/arm/start.S b/sysdeps/arm/start.S index 9b56bc0cca..4b0b098bb6 100644 --- a/sysdeps/arm/start.S +++ b/sysdeps/arm/start.S @@ -69,7 +69,7 @@ .syntax unified #endif - .text + .section .text.unlikely,"ax",%progbits .globl _start .type _start,#function _start: diff --git a/sysdeps/csky/abiv2/start.S b/sysdeps/csky/abiv2/start.S index a565cfa87b..1061da75da 100644 --- a/sysdeps/csky/abiv2/start.S +++ b/sysdeps/csky/abiv2/start.S @@ -41,7 +41,7 @@ #include - .text + .section .text.unlikely,"ax",%progbits .globl _start; .type _start,@function; .align 4; diff --git a/sysdeps/hppa/start.S b/sysdeps/hppa/start.S index 4a1877f8e8..f1164aa030 100644 --- a/sysdeps/hppa/start.S +++ b/sysdeps/hppa/start.S @@ -51,7 +51,7 @@ .Lp__libc_start_main: .word P%__libc_start_main - .text + .section .text.unlikely,"ax",%progbits .align 4 .globl _start .export _start, ENTRY diff --git a/sysdeps/i386/start.S b/sysdeps/i386/start.S index 5296b27e65..ee97f22a27 100644 --- a/sysdeps/i386/start.S +++ b/sysdeps/i386/start.S @@ -54,6 +54,7 @@ #include + .section .text.unlikely,"ax",%progbits ENTRY (_start) /* Clearing frame pointer is insufficient, use CFI. */ cfi_undefined (eip) diff --git a/sysdeps/ia64/start.S b/sysdeps/ia64/start.S index b28f8cb429..6079e67345 100644 --- a/sysdeps/ia64/start.S +++ b/sysdeps/ia64/start.S @@ -48,6 +48,7 @@ * out6: stack_end */ + .section .text.unlikely,"ax",%progbits .align 32 .global _start diff --git a/sysdeps/m68k/start.S b/sysdeps/m68k/start.S index 98da4db9f3..a2bdac5c44 100644 --- a/sysdeps/m68k/start.S +++ b/sysdeps/m68k/start.S @@ -54,7 +54,7 @@ #include - .text + .section .text.unlikely,"ax",%progbits .globl _start .type _start,@function _start: diff --git a/sysdeps/microblaze/start.S b/sysdeps/microblaze/start.S index 6589bd4dc7..9db90bf4bd 100644 --- a/sysdeps/microblaze/start.S +++ b/sysdeps/microblaze/start.S @@ -33,7 +33,7 @@ License along with the GNU C Library. If not, see . */ - .text + .section .text.unlikely,"ax",%progbits .globl _start .type _start,@function _start: diff --git a/sysdeps/mips/start.S b/sysdeps/mips/start.S index 4ec42a2a7f..c29b87d32f 100644 --- a/sysdeps/mips/start.S +++ b/sysdeps/mips/start.S @@ -71,7 +71,7 @@ void (*rtld_fini) (void), void *stack_end) */ - .text + .section .text.unlikely,"ax",%progbits .globl ENTRY_POINT .type ENTRY_POINT,@function #ifndef __mips16 diff --git a/sysdeps/nios2/start.S b/sysdeps/nios2/start.S index 7c9696977f..c963c37476 100644 --- a/sysdeps/nios2/start.S +++ b/sysdeps/nios2/start.S @@ -65,7 +65,7 @@ value, terminated by an AT_NULL tag. */ - .text + .section .text.unlikely,"ax",%progbits .globl _start .type _start,%function _start: diff --git a/sysdeps/powerpc/powerpc32/start.S b/sysdeps/powerpc/powerpc32/start.S index 39ce1a18ff..1ed3669c07 100644 --- a/sysdeps/powerpc/powerpc32/start.S +++ b/sysdeps/powerpc/powerpc32/start.S @@ -56,7 +56,7 @@ L(start_addresses): .long 0 /* Used to be fini. */ ASM_SIZE_DIRECTIVE(L(start_addresses)) - .section ".text" + .section .text.unlikely,"ax",%progbits ENTRY(_start) /* Save the stack pointer, in case we're statically linked under Linux. */ mr r9,r1 diff --git a/sysdeps/powerpc/powerpc64/start.S b/sysdeps/powerpc/powerpc64/start.S index 71c0c67926..f1597164c4 100644 --- a/sysdeps/powerpc/powerpc64/start.S +++ b/sysdeps/powerpc/powerpc64/start.S @@ -61,7 +61,7 @@ L(start_addresses): .section ".toc","aw" .L01: .tc L(start_addresses)[TC],L(start_addresses) - .section ".text" + .section .text.unlikely,"ax",%progbits ENTRY (_start) /* Save the stack pointer, in case we're statically linked under Linux. */ mr r9,r1 diff --git a/sysdeps/riscv/start.S b/sysdeps/riscv/start.S index 806f6aacd6..64b8c2699c 100644 --- a/sysdeps/riscv/start.S +++ b/sysdeps/riscv/start.S @@ -42,6 +42,7 @@ a0 contains the address of a function to be passed to atexit. __libc_start_main wants this in a5. */ + .section .text.unlikely,"ax",%progbits ENTRY (ENTRY_POINT) /* Terminate call stack by noting ra is undefined. Use a dummy .cfi_label to force starting the FDE. */ diff --git a/sysdeps/s390/s390-32/start.S b/sysdeps/s390/s390-32/start.S index b6cfa4caf3..734c32505f 100644 --- a/sysdeps/s390/s390-32/start.S +++ b/sysdeps/s390/s390-32/start.S @@ -55,7 +55,7 @@ NULL */ - .text + .section .text.unlikely,"ax",%progbits .globl _start .type _start,@function _start: diff --git a/sysdeps/s390/s390-64/start.S b/sysdeps/s390/s390-64/start.S index 4e6526308a..473576a456 100644 --- a/sysdeps/s390/s390-64/start.S +++ b/sysdeps/s390/s390-64/start.S @@ -55,7 +55,7 @@ NULL */ - .text + .section .text.unlikely,"ax",%progbits .globl _start .type _start,@function _start: diff --git a/sysdeps/sh/start.S b/sysdeps/sh/start.S index 606ee59222..f929b5d51b 100644 --- a/sysdeps/sh/start.S +++ b/sysdeps/sh/start.S @@ -57,7 +57,7 @@ NULL */ - .text + .section .text.unlikely,"ax",%progbits .globl _start .type _start,@function _start: diff --git a/sysdeps/sparc/sparc32/start.S b/sysdeps/sparc/sparc32/start.S index 00bf898fb9..2f6467832f 100644 --- a/sysdeps/sparc/sparc32/start.S +++ b/sysdeps/sparc/sparc32/start.S @@ -37,7 +37,7 @@ #include - .section ".text" + .section .text.unlikely,"ax",%progbits .align 4 .global _start .type _start,#function diff --git a/sysdeps/sparc/sparc64/start.S b/sysdeps/sparc/sparc64/start.S index 8520717eba..9f7e94d719 100644 --- a/sysdeps/sparc/sparc64/start.S +++ b/sysdeps/sparc/sparc64/start.S @@ -37,7 +37,7 @@ #include - .section ".text" + .section .text.unlikely,"ax",%progbits .align 4 .global _start .type _start,#function diff --git a/sysdeps/x86_64/start.S b/sysdeps/x86_64/start.S index 1b3e36826b..5f61764093 100644 --- a/sysdeps/x86_64/start.S +++ b/sysdeps/x86_64/start.S @@ -55,6 +55,7 @@ #include + .section .text.unlikely,"ax",%progbits ENTRY (_start) /* Clearing frame pointer is insufficient, use CFI. */ cfi_undefined (rip)