[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug ld/31688] New: ld: Add SECTION_CLASS to allow separate section matc
From: |
i at maskray dot me |
Subject: |
[Bug ld/31688] New: ld: Add SECTION_CLASS to allow separate section matching and referring |
Date: |
Wed, 01 May 2024 04:39:28 +0000 |
https://sourceware.org/bugzilla/show_bug.cgi?id=31688
Bug ID: 31688
Summary: ld: Add SECTION_CLASS to allow separate section
matching and referring
Product: binutils
Version: unspecified
Status: NEW
Severity: normal
Priority: P2
Component: ld
Assignee: unassigned at sourceware dot org
Reporter: i at maskray dot me
Target Milestone: ---
An input section description file_pattern(section_pattern) couples two
operations:
* "defining": match a subset of sections that have been been matched before
* "referring": assign them to the current output section
Roland McGrath has an idea that we can have a new syntax to separate the two
operations.
https://inbox.sourceware.org/binutils/CAB=4xhqKiXyFSm1nqrBFoJJ6VD3tvyVk-EHb2oxM+64hF9XUxg@mail.gmail.com/
(https://sourceware.org/pipermail/binutils/2024-February/132344.html)
SECTIONS {
/* Traditional output section clause: */
.output1 { *(.input1) }
/* New syntax that is not an output section clause: */
SECTION_CLASS(class1) { *(.input2) }
/* Output section clause referring to SECTION_CLASS: */
.output2 {
*(.input3) /* normal section wildcard */
SECTION_CLASS(class1) /* reference to previously defined class */
*(.input4) /* normal section wildcard */
}
.output3 {
SECTION_CLASS(class1) /* reference to remainder of class not in
.output2 */
}
.output4 {
/* reference to remainder not in .output[23], sorting applied to them
*/
SORT_BY_NAME(SECTION_CLASS(class1))
}
/* This cannot match anything that went into a SECTION_CLASS and orphans
placement does not apply to them so it's an error if any
SECTION_CLASS-matched input section has not been assigned to a
previous output section. */
.output5 { *(*) }
}
This will also be useful to tidy the .text section, whose description is
currently:
.text :
{
*(.text.unlikely .text.*_unlikely .text.unlikely.*)
*(.text.exit .text.exit.*)
*(.text.startup .text.startup.*)
*(.text.hot .text.hot.*)
*(SORT(.text.sorted.*))
*(.text .stub .text.* .gnu.linkonce.t.*)
/* .gnu.warning sections are handled specially by elf.em. */
*(.gnu.warning)
}
We have to place .text.unlikely/.text.startup/.text.hot before .text.* as
otherwise .text.* would match all text sections and render .textXXXX patterns
no-ops.
With SECTION_CLASS, if a user wants to make
.text.unlikely/.text.startup/.text.hot output sections (gold/ld.lld -z
keep-text-section-prefix; allow a program to selectively place sections into
hugepages) and if they want to place .text.startup/.text.hot after .text, they
can use:
SECTION_CLASS(text_startup) { *(.text.startup .text.startup.*) }
SECTION_CLASS(text_hot) { *(.text.hot .text.hot.*) }
.text : { *(.text .text.*) }
.text.startup : { SECTION_CLASS(text_startup) }
.text.hot : { SECTION_CLASS(text_hot) }
--
You are receiving this mail because:
You are on the CC list for the bug.
- [Bug ld/31688] New: ld: Add SECTION_CLASS to allow separate section matching and referring,
i at maskray dot me <=