* Re: Alignment and sizes of note sections in 64-bit ELF objects [not found] ` <CAMe9rOp4tDf619hCJUMMjd=MGFobSEtNgddrczWR9trb6JishQ@mail.gmail.com> @ 2017-01-01 0:00 ` Suprateeka R Hegde 2017-01-01 0:00 ` H.J. Lu 0 siblings, 1 reply; 2+ messages in thread From: Suprateeka R Hegde @ 2017-01-01 0:00 UTC (permalink / raw) To: generic-abi, H.J. Lu; +Cc: gnu-gabi (I took a while to recollect the discussion) On 16-Nov-2017 10:11 PM, H.J. Lu wrote: > On Mon, Apr 3, 2017 at 11:48 AM, Suprateeka R Hegde > <hegdesmailbox@gmail.com> wrote: >> On 03-Apr-2017 08:49 PM, Ian Lance Taylor wrote: >>> On Mon, Apr 3, 2017 at 8:16 AM, H.J. Lu <hjl.tools@gmail.com> wrote: >>>> According to gABI, in 64-bit objects, each note entry is an array of 8-bye >>>> words in the format of the target processor. But I got >>>> >>>> [ 2] .note.ABI-tag NOTE 0000000000000254 000254 >>>> 000020 00 A 0 0 4 >>>> [ 3] .note.gnu.build-id NOTE 0000000000000274 000274 >>>> 000024 00 A 0 0 4 >>>> >>>> on Linux/x86-64. .note.ABI-tag size is 32, but it isn't aligned at 8 bytes. >>>> .note.gnu.build-id size is 36, which isn't multiple of 8 bytes. Should >>>> note sections in 64-bit ELF objects be multiple of 8 bytes as well as >>>> aligned to 8 bytes? >> >> On HP-UX, it is 8 byte alignment. And the size becomes multiple of 8 >> bytes automatically, as we ensure 8 byte alignment for the next note >> entry. This is as per the gABI. >> >>> This is the comment I wrote in gold when I looked into this: >>> >>> // Authorities all agree that the values in a .note field should >>> // be aligned on 4-byte boundaries for 32-bit binaries. However, >>> // they differ on what the alignment is for 64-bit binaries. >>> // The GABI says unambiguously they take 8-byte alignment: >>> // http://sco.com/developers/gabi/latest/ch5.pheader.html#note_section >>> // Other documentation says alignment should always be 4 bytes: >>> // http://www.netbsd.org/docs/kernel/elf-notes.html#note-format >> >> Thats interesting. But why should it differ from GABI? >> >> May be because: In both ILP32 and LP64 model, integer is 4 bytes. And >> the documentation says "integer" in parenthesis for the fields. >> >> For example: >> Name Size >> 4 bytes (integer) >> Desc Size >> 4 bytes (integer) >> >> In contrast to GABI, NetBSD seems to have attributed these fields with >> "integer". >> > > Linux has been using 4 byte alignment for .note.ABI-tag note and > .note.gnu.build-id note in 64-bit objects. We can't change their > alignment to 8 bytes. Can we add a footnote in gABI to address it? It should be more clear than that. See below. > In reality, this isn't a real issue since all notes in one PT_LOAD segment > must have the same alignment which equals to p_align. p_align of PT_LOAD or PT_NOTE? > Note parser > can use p_align of PT_LOAD segment for note alignment, Why not p_align of PT_NOTE? p_align of PT_LOAD seems to be (on my Ubuntu) set to the 2MiB pagesize value. > instead of > assuming alignment based on ELF file class. The gABI description of ELF class based alignment may be because gABI does not talk anything about PT_NOTE actually being part of PT_LOAD. PT_NOTE could be a separate segment on its own outside PT_LOAD, though almost all implementations make it part of PT_LOAD. > BTW, should we document that all notes in one PT_LOAD segment > must have the same alignment which equals to p_align? Why not p_align of PT_NOTE? And p_align of PT_NOTE may be set to the maximum of all sh_addralign of all SHT_NOTE that make up the PT_NOTE. -- Supra ^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: Alignment and sizes of note sections in 64-bit ELF objects 2017-01-01 0:00 ` Alignment and sizes of note sections in 64-bit ELF objects Suprateeka R Hegde @ 2017-01-01 0:00 ` H.J. Lu 0 siblings, 0 replies; 2+ messages in thread From: H.J. Lu @ 2017-01-01 0:00 UTC (permalink / raw) To: Suprateeka R Hegde Cc: Generic System V Application Binary Interface, gnu-gabi On Mon, Nov 20, 2017 at 7:27 AM, Suprateeka R Hegde <hegdesmailbox@gmail.com> wrote: > (I took a while to recollect the discussion) > > On 16-Nov-2017 10:11 PM, H.J. Lu wrote: >> On Mon, Apr 3, 2017 at 11:48 AM, Suprateeka R Hegde >> <hegdesmailbox@gmail.com> wrote: >>> On 03-Apr-2017 08:49 PM, Ian Lance Taylor wrote: >>>> On Mon, Apr 3, 2017 at 8:16 AM, H.J. Lu <hjl.tools@gmail.com> wrote: >>>>> According to gABI, in 64-bit objects, each note entry is an array of 8-bye >>>>> words in the format of the target processor. But I got >>>>> >>>>> [ 2] .note.ABI-tag NOTE 0000000000000254 000254 >>>>> 000020 00 A 0 0 4 >>>>> [ 3] .note.gnu.build-id NOTE 0000000000000274 000274 >>>>> 000024 00 A 0 0 4 >>>>> >>>>> on Linux/x86-64. .note.ABI-tag size is 32, but it isn't aligned at 8 bytes. >>>>> .note.gnu.build-id size is 36, which isn't multiple of 8 bytes. Should >>>>> note sections in 64-bit ELF objects be multiple of 8 bytes as well as >>>>> aligned to 8 bytes? >>> >>> On HP-UX, it is 8 byte alignment. And the size becomes multiple of 8 >>> bytes automatically, as we ensure 8 byte alignment for the next note >>> entry. This is as per the gABI. >>> >>>> This is the comment I wrote in gold when I looked into this: >>>> >>>> // Authorities all agree that the values in a .note field should >>>> // be aligned on 4-byte boundaries for 32-bit binaries. However, >>>> // they differ on what the alignment is for 64-bit binaries. >>>> // The GABI says unambiguously they take 8-byte alignment: >>>> // http://sco.com/developers/gabi/latest/ch5.pheader.html#note_section >>>> // Other documentation says alignment should always be 4 bytes: >>>> // http://www.netbsd.org/docs/kernel/elf-notes.html#note-format >>> >>> Thats interesting. But why should it differ from GABI? >>> >>> May be because: In both ILP32 and LP64 model, integer is 4 bytes. And >>> the documentation says "integer" in parenthesis for the fields. >>> >>> For example: >>> Name Size >>> 4 bytes (integer) >>> Desc Size >>> 4 bytes (integer) >>> >>> In contrast to GABI, NetBSD seems to have attributed these fields with >>> "integer". >>> >> >> Linux has been using 4 byte alignment for .note.ABI-tag note and >> .note.gnu.build-id note in 64-bit objects. We can't change their >> alignment to 8 bytes. Can we add a footnote in gABI to address it? > > It should be more clear than that. See below. > >> In reality, this isn't a real issue since all notes in one PT_LOAD segment >> must have the same alignment which equals to p_align. > > p_align of PT_LOAD or PT_NOTE? > >> Note parser >> can use p_align of PT_LOAD segment for note alignment, > > Why not p_align of PT_NOTE? p_align of PT_LOAD seems to be (on my > Ubuntu) set to the 2MiB pagesize value. > >> instead of >> assuming alignment based on ELF file class. > > The gABI description of ELF class based alignment may be because gABI > does not talk anything about PT_NOTE actually being part of PT_LOAD. > PT_NOTE could be a separate segment on its own outside PT_LOAD, though > almost all implementations make it part of PT_LOAD. > >> BTW, should we document that all notes in one PT_LOAD segment >> must have the same alignment which equals to p_align? > > Why not p_align of PT_NOTE? And p_align of PT_NOTE may be set to the > maximum of all sh_addralign of all SHT_NOTE that make up the PT_NOTE. Typo. It should be PT_NOTE, instead of PT_LOAD. -- H.J. ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-11-20 15:51 UTC | newest] Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <CAMe9rOoWPk84b9HoeiJdF4B_X090jfQQXCyNUm1_R22uNSHOkw@mail.gmail.com> [not found] ` <CAOganjUx7N4qTEEM0DDdn0izhO_UPv9miB7w4O0abU=p4GmT0w@mail.gmail.com> [not found] ` <6de4d8f7-a08e-7aac-64d0-3e41795c9143@gmail.com> [not found] ` <CAMe9rOp4tDf619hCJUMMjd=MGFobSEtNgddrczWR9trb6JishQ@mail.gmail.com> 2017-01-01 0:00 ` Alignment and sizes of note sections in 64-bit ELF objects Suprateeka R Hegde 2017-01-01 0:00 ` H.J. Lu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).