[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2] coverage: place GCOV-generated .text.startup section in init text


  • To: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Dmytro Prokopchuk1 <dmytro_prokopchuk1@xxxxxxxx>
  • Date: Fri, 29 May 2026 08:53:30 +0000
  • Accept-language: en-US, uk-UA, ru-RU
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wO+jFzbod4C+pyxXBAyfbVnLWIu9dPiLGItqyGWQf8I=; b=OqXu0kHYE5GmGrVYF5JEqqVc86DMQFYjV5nF8bptgXPRgK0BVNW1OmAR+m2gSUG6p4IzIvVwr0ifx/vwNUViu4q/ip7oZaA2AL85Hq3/VBFdzd5ls4qs1kdW9eyBGFcwmdq7hjk3YAabBpNXCWj9nYENfXh36a7ecEK7e7NC6Gruj7GqKjgWqqYRHQfukQooaUy41z6b8s0ER3Mzgzxbiw5dyBbKibxdZ1NF0iE4EhRCjD863RJiCPf6fWdwwcCrpf6rViasIZEkMNZjNdGO6VuFnXiuvgtoFeGnBWEgExX5KMCVlyMTOk4Cs4cGXbdetXcpWlJsEQACkpxkzZKEFA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=emWDsxZuco8iSCVwu+3etZnkMVWaVUITz9mYlXqTv6y8cnXL8iYnUtg03J2dURkG1gREpvtE5A2Fp8MnhEdJRMabtQP82SKOrR7uds79/Pq9vnoyq0cTb/TuqLOixP9D49iI/+HKDBT+KxyZd+bXLoWGs3PIU7mivLRv/FiFjqc6iI4OoeUikmWJP3yZ9lyMfj90AwujY/y+KE6fqmArZL3q5chP2nSPLiWcEsuY7HdypkPEqAOzjj1ofJ07tmPs9ZPMgzM/fjCG5vTK5Vav5CNC0w6tNDKdU8RTpXclvZwhNXsRIE3VJgqu8ZUVfEqOtitlKhgG3sL0wcIhqZBYyQ==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=epam.com header.i="@epam.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com;
  • Cc: Dmytro Prokopchuk1 <dmytro_prokopchuk1@xxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Timothy Pearson <tpearson@xxxxxxxxxxxxxxxxxxxxx>, Alistair Francis <alistair.francis@xxxxxxx>, Connor Davis <connojdavis@xxxxxxxxx>, Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
  • Delivery-date: Fri, 29 May 2026 08:54:00 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHc70ifTHJ2JaDHW0i9kIm+tvP8Mw==
  • Thread-topic: [PATCH v2] coverage: place GCOV-generated .text.startup section in init text

GCOV instrumentation can emit executable input sections such as
.text.startup when CONFIG_COVERAGE is enabled.

At present the x86 already places .text.startup in .init.text,
but Arm, RISC-V and PPC do not. With CONFIG_COVERAGE=y .text.startup
can therefore be treated as a linker orphan on those architectures.

Constructors generated by coverage instrumentation can then point
at code outside the normal RX text mapping, leading to early boot
crashes from init_constructors():

    (XEN) [   12.331193] Instruction Abort Trap. Syndrome=0xf
    (XEN) [   12.334253] Walking Hypervisor VA 0xa00003ce000 on CPU0 via TTBR 
0x000000004352d000
    (XEN) [   12.338550] 0TH[0x014] = 0x4352cf7f
    (XEN) [   12.341823] 1ST[0x000] = 0x4352bf7f
    (XEN) [   12.345124] 2ND[0x001] = 0x40000043527f7f
    (XEN) [   12.347329] 3RD[0x1ce] = 0x400000433cef7f
    (XEN) [   12.351233] CPU0: Unexpected Trap: Instruction Abort
    (XEN) [   12.357643] ----[ Xen-4.21.1  arm64  debug=n gcov=y  Not tainted 
]----
    (XEN) [   12.360243] CPU:    0
    (XEN) [   12.364098] PC:     00000a00003ce000 00000a00003ce000
    (XEN) [   12.375835] LR:     00000a00004802f8
    (XEN) [   12.378273] SP:     00000a00004c7e10
    (XEN) [   12.380492] CPSR:   0000000080000249 MODE:64-bit EL2h (Hypervisor, 
handler)
    (XEN) [   12.382785]      X0: 00000a00003ce000  X1: 0000000000000000  X2: 
00000a0000410fa0
    (XEN) [   12.385176]      X3: 0000000000000000  X4: 0000000000000010  X5: 
0000000000000001
    (XEN) [   12.387555]      X6: 00000a00004e5f40  X7: 00000a00004e5f38  X8: 
0000000000000000
    (XEN) [   12.390027]      X9: 00000a00004e5f20 X10: 00000a00004e5f30 X11: 
00000a00004e5f40
    (XEN) [   12.392510]     X12: 00000a0000439748 X13: 00000a0000406938 X14: 
000000000000062e
    (XEN) [   12.394954]     X15: 00000a00004f3918 X16: 00000a00004c7bb5 X17: 
00000000004c7bb5
    (XEN) [   12.397293]     X18: 0000000000000030 X19: 000000000000001d X20: 
00000000000000a9
    (XEN) [   12.399803]     X21: 00000a00004c8008 X22: 00000a00003fa000 X23: 
00000a00004e2000
    (XEN) [   12.402392]     X24: 00000a00003f9390 X25: 00000a00003fa000 X26: 
00000a00003f4ca8
    (XEN) [   12.404798]     X27: 0000000000000002 X28: 00000a000057a9c0  FP: 
00000000bedb6740
    (XEN) [   12.407110]
    (XEN) [   12.409442]   VTCR_EL2: 0000000080023558
    (XEN) [   12.411291]  VTTBR_EL2: 00000000bffc4000
    (XEN) [   12.412895]
    (XEN) [   12.414204]  SCTLR_EL2: 0000000030cd183d
    (XEN) [   12.415928]    HCR_EL2: 0000000000000039
    (XEN) [   12.417642]  TTBR0_EL2: 000000004352d000
    (XEN) [   12.419152]
    (XEN) [   12.420327]    ESR_EL2: 000000008600000f
    (XEN) [   12.422056]  HPFAR_EL2: 0000000000000000
    (XEN) [   12.423809]    FAR_EL2: 00000a00003ce000
    ...
    (XEN) [   12.485355] Xen call trace:
    (XEN) [   12.489080]    [<00000a00003ce000>] 00000a00003ce000 (PC)
    (XEN) [   12.512076]    [<00000a00004802f8>] init_constructors+0x38/0x50 
(LR)

Observed failing symbol:
    _sub_I_00100_0
called from:
    init_constructors()
The issue can be diagnosed by enabling linker orphan diagnostics or
generating a linker map:
    LDFLAGS += "--orphan-handling=warn"
    LDFLAGS += "-Map=xen.map"
and then inspecting orphaned executable sections such as:
    .text.startup

Place .text.startup in .init.text on the non-x86 linker scripts,
matching the existing x86 behavior.

Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@xxxxxxxx>
---
Changes in v2:
- do not add *(.text.*) when CONFIG_COVERAGE is enables
- copy the existing x86 linker script behavior to the non-x86 linker scripts
  (put .text.startup into .init.text on Arm, RISC-V and PPC)
- update commit subject and message accordingly

Link to v1:
https://patchew.org/Xen/cb8c1e0862a554f7a28347f549e9cfd0b0d6db2f.1779829545.git.dmytro._5Fprokopchuk1@xxxxxxxx/

Test CI pipeline:
https://gitlab.com/xen-project/people/dimaprkp4k/xen/-/pipelines/2561258404
---
 xen/arch/arm/xen.lds.S   | 1 +
 xen/arch/ppc/xen.lds.S   | 1 +
 xen/arch/riscv/xen.lds.S | 1 +
 3 files changed, 3 insertions(+)

diff --git a/xen/arch/arm/xen.lds.S b/xen/arch/arm/xen.lds.S
index 2d5f1c516d..4aab7770c9 100644
--- a/xen/arch/arm/xen.lds.S
+++ b/xen/arch/arm/xen.lds.S
@@ -125,6 +125,7 @@ SECTIONS
   .init.text : {
        _sinittext = .;
        *(.init.text)
+       *(.text.startup)
        _einittext = .;
        . = ALIGN(PAGE_SIZE);        /* Avoid mapping alt insns executable */
        *(.altinstr_replacement)
diff --git a/xen/arch/ppc/xen.lds.S b/xen/arch/ppc/xen.lds.S
index d0f2ed43f1..de3aad0aae 100644
--- a/xen/arch/ppc/xen.lds.S
+++ b/xen/arch/ppc/xen.lds.S
@@ -98,6 +98,7 @@ SECTIONS
     DECL_SECTION(.init.text) {
         _sinittext = .;
         *(.init.text)
+        *(.text.startup)
         _einittext = .;
         . = ALIGN(PAGE_SIZE);        /* Avoid mapping alt insns executable */
     } :text
diff --git a/xen/arch/riscv/xen.lds.S b/xen/arch/riscv/xen.lds.S
index 65f136dce9..c6f765a1c5 100644
--- a/xen/arch/riscv/xen.lds.S
+++ b/xen/arch/riscv/xen.lds.S
@@ -103,6 +103,7 @@ SECTIONS
     .init.text : {
         _sinittext = .;
         *(.init.text)
+        *(.text.startup)
         _einittext = .;
         . = ALIGN(PAGE_SIZE);        /* Avoid mapping alt insns executable */
     } :text
-- 
2.43.0



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.