Feature request: gas .prefalign directive for body-size-dependent function alignment

Hans-Peter Nilsson hp@bitrange.com
Wed Mar 25 00:05:05 GMT 2026


On Mon, 23 Mar 2026, Fangrui Song wrote:
> On Mon, Mar 23, 2026 at 8:35?PM Hans-Peter Nilsson <hp@bitrange.com> wrote:
> >
> > On Mon, 23 Mar 2026, Fangrui Song wrote:
> > > On Mon, Mar 23, 2026 at 12:08?AM Jan Beulich <jbeulich@suse.com> wrote:
> > > >
> > > > On 21.03.2026 23:09, Fangrui Song wrote:
> > > > > On Wed, Mar 11, 2026 at 6:58?PM Fangrui Song <i@maskray.me> wrote:
> > > > > .prefalign 4, end, 0001
> > > > > .prefalign 4, end, 00010203
> > > >
> > > > For these last two, how would the parser know how many bytes there are per
> > > > padding token? Surely not number of digits in source?
> > > >
> > > > Jan
> > >
> > > Intuitively, just count the number of bytes represented by the hex
> > > pairs (xxd -p style)...
> > >
> > > 00 => 1 filler byte. The filler is 000000...
> > > 0001 => 2 filler bytes. The filler is 000100010001...
> > > 00010203 => 4 filler bytes.
> > >
> > > The nop keyword means nop filler ("nop" is not matched by [0-9a-fA-F]+).
> 
> I have never encountered a use case that requires the fill value to be
> an expression

My argument is for consistency of the *format* of the (literal) 
value, not about using it for an *expression*.  (For all I care, 
you could require a non-expression literal, if you prefer.)

Having said that, you may have realized it but JFTR...

> (just use the C preprocessor if you have such a use
> case!), so I suggested hex pairs...

...arguing expression use cases to go through the C preprocessor 
(like, gcc applied on a .S file emitting an .s file) is an 
argument *against* requiring a non-prefixed hex number.  The C 
preprocessor doesn't evalate expressions in the output (except 
in preprocessor directives like #if), it just expands them.  
But maybe I misunderstood you.

Still, as you wrote later,

> > Pleeease use regular syntax, not some new special format.
> > Like, not:
[omitted]

> But if there is a preference for len+fill_value representation, then let's use
> 
> .perfalign <log2_align>, <end_sym>, <fill_exp> [, <fill_len>]
> .perfalign <log2_align>, <end_sym>, nop
> 
> fill_len, if omitted, defaults to 1 to make the common zero-filler
> easier to write.

Works for me, thanks!

brgds, H-P


More information about the Binutils mailing list