|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [livepatch-build-tools part2 6/6] create-diff-object: Do not include all .rodata sections
> On 29. Apr 2019, at 18:11, Ross Lagerwall <ross.lagerwall@xxxxxxxxxx> wrote:
>
> On 4/16/19 1:07 PM, Pawel Wieczorkiewicz wrote:
>> Starting with the "2af6f1aa6233 Fix patch creation with GCC 6.1+" commit
>> all .rodata sections are included by default (regardless of whether they
>> are needed or not).
>> During stacked hotpatch builds it leads to unnecessary duplication of
>> the .rodata sections as each and every consecutive hotpatch contains all
>> the .rodata section of previous hotpatches.
>
> This commit message is a bit confusing.
>
> 1) All of this only applies to .rodata.str* sections. Other .rodata sections
> are handled separately.
Yes, that’s right. I will make the commit message precise.
ACK. Will fix.
>
> 2) The above commit _did not_ introduce the problem. Previous versions of GCC
> did not split .rodata.str sections by function which meant that the entire
> section was always included. The commit fixed patch creation and _maintained_
> the existing behaviour for GCC 6.1+ by including all the
I see, thanks for the clarification. I will update the wording to avoid
confusion and incorrect attribution here.
> .rodata.str* sections. This patch now includes only what is needed (but it
> should be noted that this would likely not be useful on older versions of GCC
> since they don't split .rodata.str properly).
OK, I suppose users of older versions of GCC have to accept the fact.
>
>> To prevent this situation, mark the .rodata section for inclusion only
>> if they are referenced by any of the current hotpatch symbols (or a
>> corresponding RELA section).
>> Extend patchability verification to detect all non-standard, non-rela,
>> non-debug and non-special sections that are not referenced by any of
>> the symbols or RELA sections.
>> Signed-off-by: Pawel Wieczorkiewicz <wipawel@xxxxxxxxx>
>> Reviewed-by: Andra-Irina Paraschiv <andraprs@xxxxxxxxxx>
>> Reviewed-by: Bjoern Doebel <doebel@xxxxxxxxx>
>> Reviewed-by: Norbert Manthey <nmanthey@xxxxxxxxx>
>> ---
>> create-diff-object.c | 27 ++++++++++++++++++++++++++-
>> 1 file changed, 26 insertions(+), 1 deletion(-)
>> diff --git a/create-diff-object.c b/create-diff-object.c
>> index f6060cd..f7eb421 100644
>> --- a/create-diff-object.c
>> +++ b/create-diff-object.c
>> @@ -1341,7 +1341,7 @@ static void kpatch_include_standard_elements(struct
>> kpatch_elf *kelf)
>> list_for_each_entry(sec, &kelf->sections, list) {
>> /* include these sections even if they haven't changed */
>> - if (is_standard_section(sec) ||
>> should_include_str_section(sec->name)) {
>> + if (is_standard_section(sec)) {
>> sec->include = 1;
>> if (sec->secsym)
>> sec->secsym->include = 1;
>> @@ -1352,6 +1352,19 @@ static void kpatch_include_standard_elements(struct
>> kpatch_elf *kelf)
>> list_entry(kelf->symbols.next, struct symbol, list)->include = 1;
>> }
>> +static void kpatch_include_standard_string_elements(struct kpatch_elf
>> *kelf)
>> +{
>> + struct section *sec;
>> +
>> + list_for_each_entry(sec, &kelf->sections, list) {
>> + if (should_include_str_section(sec->name) &&
>> is_referenced_section(sec, kelf)) {
>> + sec->include = 1;
>> + if (sec->secsym)
>> + sec->secsym->include = 1;
>> + }
>> + }
>> +}
>
> I think it would be simpler to just amend the previous function rather than
> introducing a new one. E.g.
>
> ... || (should_include_str_section(sec->name) && is_referenced_section(sec,
> kelf))
IIRC, it is unfortunately too early to do that from within
kpatch_include_standard_elements().
I want to call the kpatch_include_standard_string_elements() after the
following functions are called:
- kpatch_include_changed_functions()
- kpatch_include_debug_sections()
- kpatch_include_hook_elements()
because they may affect is_referenced_section() result.
>
> Regards,
> --
> Ross Lagerwall
Best Regards,
Pawel Wieczorkiewicz
Amazon Development Center Germany GmbH
Krausenstr. 38
10117 Berlin
Geschaeftsfuehrer: Christian Schlaeger, Ralf Herbrich
Ust-ID: DE 289 237 879
Eingetragen am Amtsgericht Charlottenburg HRB 149173 B
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |