[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.