Hi! On Tue, Jan 25, 2022 at 06:12:20PM -0800, Nick Desaulniers wrote: > Andrew clarified (thanks Andrew!) that %= can't be used as I imagined > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104236#c4 > and that I think was alluded to in > commit 3d1e236022cc ("objtool: Prevent GCC from merging annotate_unreachable()") > which is fine, so I'll just need to keep usage of __COUNTER__. Aha. Yes, %= *outputs* a unique number. Before the assembler output is written %= is just a string (like any other piece of output template). The output template is used for three things: 1) Inline assembler statements with different output templates are not considered identical; 2) Newlines and assembler statement separators (semicolons for most assembler dialects) are used to estimate the size of the machine code generated. This is a pessimistic estimate, but within reason: for example you can write a million byte output with just a few characters of input, if you want to sabotage yourself; 3) The output template is used at output time. The mentioned commit's message says "unfortunately older versions of GCC don't support it" which is mistaken. If you want two identical inline asm statements to not be considered identical by the compiler, you have to make them not identical. Like by using __COUNTER__ for example, yes :-) Segher