Re: [PATCH v3] objtool: Support multiple rodata sections.

From: Josh Poimboeuf
Date: Fri Sep 07 2018 - 09:08:42 EST


On Wed, Aug 29, 2018 at 06:04:12PM +0100, Allan Xavier wrote:
> This commit adds support for processing switch jump tables in objects
> with multiple .rodata sections, such as those created when using
> -ffunction-sections and -fdata-sections. Currently, objtool always
> looks in .rodata for jump table information which results in many
> "sibling call from callable instruction with modified stack frame"
> warnings with objects compiled using those flags.
>
> The fix is comprised of three parts:
>
> 1. Flagging all .rodata sections when importing elf information for
> easier checking later.
>
> 2. Keeping a reference to the section each relocation is from in order
> to get the list_head for the other relocations in that section.
>
> 3. Finding jump tables by following relocations to .rodata sections,
> rather than always referencing a single global .rodata section.
>
> The patch has been tested without data sections enabled and no
> differences in the resulting orc unwind information were seen.
>
> Note that as objtool adds terminators to end of each .text section the
> unwind information generated between a function+data sections build and
> a normal build aren't directly comparable. Manual inspection suggests
> that objtool is now generating the correct information, or at least
> making more of an effort to do so than it did previously.
>
> Signed-off-by: Allan Xavier <allan.x.xavier@xxxxxxxxxx>
> ---
>
> Changes since v2:
> - Reworked and commented mark_rodata as suggested.
>
> Changes since v1:
> - Cleaned up section symbol check.
> - Fixed brackets.
> - Moved mark_rodata to decode_sections().
> - Excluded *.str1.[18] sections from rodata sections.

Thanks, looks good. I'll submit it to the -tip tree.

--
Josh