Messages in this thread |  | | From | Thomas Gleixner <> | Subject | Re: [PATCH 3/5] x86/alternative: record .altinstructions section entity size | Date | Tue, 05 Apr 2022 21:24:02 +0200 |
| |
On Sun, Mar 13 2022 at 21:05, Alexey Dobriyan wrote: > On Sat, Mar 12, 2022 at 10:17:40PM +0100, Peter Zijlstra wrote: >> On Fri, Mar 11, 2022 at 05:43:10PM +0300, Alexey Dobriyan wrote: >> > + ".pushsection .altinstructions,\"aM\",@progbits," __stringify(sizeof_struct_alt_instr) "\n"\ >> > + ".pushsection .altinstructions,\"aM\",@progbits," __stringify(sizeof_struct_alt_instr) "\n"\ >> > + ".pushsection .altinstructions,\"aM\",@progbits," __stringify(sizeof_struct_alt_instr) "\n"\ >> >> > + .pushsection .altinstructions,"aM",@progbits,sizeof_struct_alt_instr >> > + .pushsection .altinstructions,"aM",@progbits,sizeof_struct_alt_instr >> >> Aside of adding entsize, you're also adding the M(ergable) bit. Also, >> those lines are on the unwieldy side of things. > > binutils doc says > > https://sourceware.org/binutils/docs/as/Section.html > > If flags contains the M symbol then the type argument must be specified as well as an extra argument—entsize—like this: > > .section name , "flags"M, @type, entsize > > Sections with the M flag but not S flag must contain fixed size constants, > each entsize octets long. Sections with both M and S must contain zero > terminated strings where each character is entsize bytes long. The linker > may remove duplicates within sections with the same name, same entity size > and same flags. entsize must be an absolute expression. For sections with > both M and S, a string which is a suffix of a larger string is considered > a duplicate. Thus "def" will be merged with "abcdef"; A reference to the > first "def" will be changed to a reference to "abcdef"+3. > > "a"M doesn't work, but "aM" does. > > I don't know if merging is the issue, it is not like alt replacements have names.
That does not matter. M merges any duplications in sections with the same [section] name, entity size and flags.
.pushsection .bar "aM" @progbits, 4 .byte 0x01, 0x02, 0x03, 0x04 .popsection
.pushsection .bar "aM" @progbits, 4 .byte 0x01, 0x02, 0x03, 0x04 .popsection
Will create a section .bar with lenght 4 and the content: 0x1,0x2,0x3,0x4
What saves you here is the fact that the altinstruction entries are guaranteed to be unique, but that wants a big fat comment.
Thanks,
tglx
|  |