plotfi added a comment.
So, @compnerd and I have discussed and we'd like to propose a yaml schema that
can express what we need for ifsos for the Sections and the Symbols.
For the Symbols we want:
Symbols:
- Name: _dataA
Type: STT_OBJECT
Section: .data
Binding: STB_GLOBAL
- Name: __ZN3qux3barEii
Type: STT_FUNC
Section: .text
Binding: STB_GLOBAL
Because this expresses the bare minimum of the symbol name, whether its a
function or an exported object, which section it belongs to, and if it is bound
globally or locally or weakly.
For the sections, this yaml schema gives us what we need to set the name, type
and flags properly:
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- Name: .data
Type: SHT_PROGBITS
Flags: [ SHF_WRITE, SHF_ALLOC ]
We also think that the existing FileHeader works for emitting ELF ifsos:
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
I could see us compacting this (something like "Kind: ELF_64_LSB_X86-64") but I
don't see why we'd want to deviate from what ELF already lays out.
The file type is important because ET_REL vs ET_DYN can be used to denote if
this is an ifso artifact that is meant to be merged or if it is already merged.
I think we could have one stage that does the merging of the ET_RELs and one
that assembles the final binary from a merged ET_DYN ifso.
We looked at other formats like TBD, and the major thing we also want to add is:
--- !ifso-elf-v1
at the beginning of the yaml to denote that this is an ifso specifically for
ELF and to denote the versioning.
I think the versioning could be used to direct how we read the FileHeader.
So the yaml ifso file syntax:
--- !ifso-elf-<version>
FileHeader:
Class: <ELFCLASS64 | ELFCLASS32>
Data: <ELFDATA2LSB | ELFDATA2MSB>
Type: <ET_REL, ET_DYN, etc>
Machine: <machine>
Sections:
# One or more of these:
- Name: <section name>
Type: <SHT_ section type>
Flags: [ <section flags> ]
Symbols:
# One or more of these:
- Name: <symbol name>
Type: <STT_ symbol type, ie STT_OBJECT, STT_FUNC etc>
Section: <section>
Binding: <STB_ symbol binding, ie STB_GLOBAL, STB_WEAK etc>
How does this sound?
PL
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D60974/new/
https://reviews.llvm.org/D60974
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits