On 29.03.2024 15:41, Jason Andryuk wrote:
> On 2024-03-28 12:47, Jan Beulich wrote:
>> On 27.03.2024 22:51, Jason Andryuk wrote:
>>> --- a/xen/common/libelf/libelf-loader.c
>>> +++ b/xen/common/libelf/libelf-loader.c
>>> @@ -468,6 +468,7 @@ void elf_parse_binary(struct elf_binary *elf)
>>>   {
>>>       ELF_HANDLE_DECL(elf_phdr) phdr;
>>>       uint64_t low = -1, high = 0, paddr, memsz;
>>> +    uint64_t max_align = 0, palign;
>>>       unsigned i, count;
>>>   
>>>       count = elf_phdr_count(elf);
>>> @@ -481,17 +482,23 @@ void elf_parse_binary(struct elf_binary *elf)
>>>               continue;
>>>           paddr = elf_uval(elf, phdr, p_paddr);
>>>           memsz = elf_uval(elf, phdr, p_memsz);
>>> -        elf_msg(elf, "ELF: phdr: paddr=%#" PRIx64 " memsz=%#" PRIx64 "\n",
>>> -                paddr, memsz);
>>> +        palign = elf_uval(elf, phdr, p_align);
>>> +        elf_msg(elf,
>>> +                "ELF: phdr: paddr=%#" PRIx64 " memsz=%#" PRIx64 " 
>>> palign=%#" PRIx64 "\n",
>>> +                paddr, memsz, palign);
>>>           if ( low > paddr )
>>>               low = paddr;
>>>           if ( high < paddr + memsz )
>>>               high = paddr + memsz;
>>> +        if ( max_align < palign )
>>> +            max_align = palign;
>>>       }
>>>       elf->pstart = low;
>>>       elf->pend = high;
>>> -    elf_msg(elf, "ELF: memory: %#" PRIx64 " -> %#" PRIx64 "\n",
>>> -            elf->pstart, elf->pend);
>>> +    elf->palign = max_align;
>>> +    elf_msg(elf,
>>> +            "ELF: memory: %#" PRIx64 " -> %#" PRIx64 " align:%#" PRIx64 
>>> "\n",
>>> +            elf->pstart, elf->pend, elf->palign);
>>>   }
>>
>> Hmm, it's just this final logging change which I'm a little concerned by:
>> Having looked at Linux'es phdr, I noticed that the addresses there aren't
>> necessarily matching the corresponding alignment. Therefore I'm a little
>> concerned that the output here might raise questions when people see
>> seemingly inconsistent values in the log. Could you/we at least make it
>> read like e.g. "align (max): ..."?
> 
> max_align?
> 
> Looking at my test vmlinux, it looks like PHDR 0 (.text) and PHDR 1 
> (.data) are aligned.  It's the PHDR 2 (.init) that isn't aligned.  Is 
> that what you see?
> 
> This line is already printing the min and max across all the PHDRs, so 
> it would only look confusing if the start didn't match the align.
> 
> I'm not sure how useful it is to print the alignment, and I considered 
> not printing it.  It's only used with PVH Dom0 right now, so it's not 
> relevant in most cases.

Well, yes, not printing the alignment would be fine with me. I just didn't
suggest that as an alternative since I was assuming you put its printing
there for a reason.

Jan

Reply via email to