cc += binutils ML
[on @progbits v %progbits in generic (data only) assembly code]
On 22/11/2019 12.44, Masahiro Yamada wrote:
On Fri, Nov 22, 2019 at 1:09 AM Jessica Yu <jeyu@xxxxxxxxxx> wrote:
I think this would work, and it feels like the more correct solution
especially if arm isn't the only one with the odd progbits char. It
might be overkill if it's just arm that's affected though. I leave it
to Masahiro to see what he prefers.
BTW, is there any reason why
not use %progbits all the time?
include/linux/init.h hard-codes %progbits
#define __INITDATA .section ".init.data","aw",%progbits
#define __INITRODATA .section ".init.rodata","a",%progbits
So, my understanding is '%' works for all architectures,
but it is better to ask 0-day bot to test it.
It seems that you're absolutely right. The binutils source has code like
+ if (*input_line_pointer == '@' || *input_line_pointer == '%')
+ {
+ ++input_line_pointer;
+ if (strncmp (input_line_pointer, "progbits",
+ sizeof "progbits" - 1) == 0)
+ {
+ type = SHT_PROGBITS;
+ input_line_pointer += sizeof "progbits" - 1;
+ }
+ else if (strncmp (input_line_pointer, "nobits",
+ sizeof "nobits" - 1) == 0)
+ {
+ type = SHT_NOBITS;
+ input_line_pointer += sizeof "nobits" - 1;
+ }
The only reason I thought one needed to do it differently on ARM is this
from the gas docs:
===
The optional TYPE argument may contain one of the following
constants:
'@progbits'
section contains data
...
Note on targets where the '@' character is the start of a comment (eg
ARM) then another character is used instead. For example the ARM port
uses the '%' character.
===
That doesn't suggest the possibility that % or some other character
might work on all architectures.
Jessica, can you resend using just %progbits to let kbuild chew on that?
Please include a comment about the misleading gas documentation.