On Tue, 2019-02-26 at 09:33 +0100, Richard Biener wrote:
> On Mon, 25 Feb 2019, Mark Wielaard wrote:
> > Since the introduction of GNU Property notes this is (sadly) no
> > longer
> > the correct way to iterate through ELF notes. The padding of names
> > and
> > desc  might now depend on the alignment of the PT_NOTE segment.
> > https://sourceware.org/ml/binutils/2018-09/msg00359.html
> 
> Ick, that's of course worse ;)  So it's not entirely clear what
> the correct thing to do is - from how I read the mail at the above
> link only iff sh_align of the note section is exactly 8 the above
> ALIGN would use 8 byte alignment and else 4 is correct (independent
> on sh_align).  Or can I assume sh_align of the note section is
> "correct" for all existing binaries?  Note also the eventual
> difference
> between note sections and note program headers which have another,
> possibly different(?) alignment?  It's of course "easy" to replace
> 4 above by info->dlpi_phdr[i].p_align (but the align field differs
> in width between elfclass 32 and 64 ... :/).
> 
> So - is merely changing the re-alignment from 4 to 
> info->dlpi_phdr[i].p_align "correct"?

Yes, you will have multiple note segments one that combines the 4
padded notes and one that combines the 8 padded notes.
Some tools put 0 or 1 in the align field, so you might want to use
(completely untested):
align = (p_align <= 4) ? 4 : 8;
offset += ALIGN ((ALIGN (sizeof (uint32_t) * 3 + namesz, align)
                  + descsz), align);

Cheers,

Mark

Reply via email to