[PATCH] ld: Support customized output section type
Fangrui Song
i@maskray.me
Wed Feb 2 18:32:06 GMT 2022
On 2022-02-02, Nick Clifton via Binutils wrote:
>Hi Fangrui,
>
>>The current output section type allows to set the ELF section type to
>>SHT_PROGBITS or SHT_NOLOAD. This patch allows an arbitrary section value
>>to be specified. Some ELF section type names are supported as well,
>
>Thanks for the patch submission. I am regression testing it at the moment
>but in the meantime a couple of things stood out for me:
>
>
>>+@item TYPE = @var{type}
>>+Set the section type to the integer @var{type}. For the ELF output
>>+file, some type names (e.g. @code{SHT_NOTE}) are also allowed for
>>+@var{type}.
>
>Rather than having users guess, it would probably be best to list which
>type names are supported.
>
>Also it is probably worth documenting that it is the user's fault if they
>set the section type to something which has special semantics (eg SHT_GROUP)
>but then they do not also arrange for whatever necessary support that feature
>needs. Something like: "it is the user's responsibility to ensure that
>any special requirements of the section type are met".
Thanks for the quick review! Adopted the wording and the change below.
The new patch is in the attachment.
For SHT_GROUP, I think it is useful to support SHT_GROUP as well. I
actually did an experiment last night but SHT_GROUP led to an internal
error. There may be some issues that need to be fixed to use the
SHT_GROUP feature.
>
>
>>+ case type_section:
>>+ if (os->sectype_value->type.node_class == etree_name
>>+ && os->sectype_value->type.node_code == NAME)
>>+ {
>>+ const char *name = os->sectype_value->name.name;
>>+ if (strcmp (name, "SHT_PROGBITS") == 0)
>>+ type = SHT_PROGBITS;
>>+ else if (strcmp (name, "SHT_NOTE") == 0)
>>+ type = SHT_NOTE;
>>+ else if (strcmp (name, "SHT_NOBITS") == 0)
>>+ type = SHT_NOBITS;
>>+ else if (strcmp (name, "SHT_INIT_ARRAY") == 0)
>>+ type = SHT_INIT_ARRAY;
>>+ else if (strcmp (name, "SHT_FINI_ARRAY") == 0)
>>+ type = SHT_FINI_ARRAY;
>>+ else if (strcmp (name, "SHT_PREINIT_ARRAY") == 0)
>>+ type = SHT_PREINIT_ARRAY;
>>+ else
>>+ einfo (_ ("%F%P: invalid type for output section `%s'\n"),
>>+ os->name);
>
>It might be worth adding SHT_STRTAB to this list, as I can imagine some
>weird sceanario where someone would want it.
Added.
>
>Also - given that this is a new feature, there really ought to be an entry
>for it in the ld/NEWS file.
Added. The NEW entry is for 2.39, but feel free to port it to 2.38 if
you think appropriate:)
>Cheers
> Nick
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-ld-Support-customized-output-section-type.patch
Type: text/x-diff
Size: 14754 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20220202/07f5007c/attachment.bin>
More information about the Binutils
mailing list