ping. The addition of SHT_SYMTAB_SHNDX is not just estetic improvement but fixes GHC HEAD build failure on OpenBSD 6.2-current. Hence pinging.
Thanks! Karel On Tue, 16 Jan 2018 11:51:53 +0100 Martin Pieuchot <m...@openbsd.org> wrote: > On 15/01/18(Mon) 23:11, Karel Gardas wrote: > > patch below defines SHT_SYMTAB_SHNDX which is required for usage of > > SHN_XINDEX which got added/defined during October 2017 by mpi. > > > > See: http://www.sco.com/developers/gabi/latest/ch4.sheader.html: > > > > SHT_SYMTAB_SHNDX > > This section is associated with a symbol table section and is required > > if any of the section header indexes referenced by that symbol table > > contain the escape value SHN_XINDEX. The section is an array of Elf32_Word > > values. Each value corresponds one to one with a symbol table entry and > > appear in the same order as those entries. The values represent the section > > header indexes against which the symbol table entries are defined. Only if > > the corresponding symbol table entry's st_shndx field contains the escape > > value SHN_XINDEX will the matching Elf32_Word hold the actual section > > header index; otherwise, the entry must be SHN_UNDEF (0). > > Thanks, I took some time to pull more of the defines included in > FreeBSD's r153502 where SHT_SYMTAB_SHNDX got introduced. I'd like to > commit the diff below. > > Index: sys/sys/exec_elf.h > =================================================================== > RCS file: /cvs/src/sys/sys/exec_elf.h,v > retrieving revision 1.78 > diff -u -p -r1.78 exec_elf.h > --- sys/sys/exec_elf.h 9 Dec 2017 06:35:08 -0000 1.78 > +++ sys/sys/exec_elf.h 16 Jan 2018 10:48:02 -0000 > @@ -99,22 +99,27 @@ typedef __uint16_t Elf64_Quarter; > #define ELFDATANUM 3 /* number of data encode defines */ > > /* e_ident[] Operating System/ABI */ > -#define ELFOSABI_SYSV 0 /* UNIX System V ABI */ > +#define ELFOSABI_NONE 0 /* UNIX System V ABI */ > #define ELFOSABI_HPUX 1 /* HP-UX operating system */ > #define ELFOSABI_NETBSD 2 /* NetBSD */ > #define ELFOSABI_LINUX 3 /* GNU/Linux */ > #define ELFOSABI_HURD 4 /* GNU/Hurd */ > #define ELFOSABI_86OPEN 5 /* 86Open common IA32 ABI */ > #define ELFOSABI_SOLARIS 6 /* Solaris */ > -#define ELFOSABI_MONTEREY 7 /* Monterey */ > +#define ELFOSABI_AIX 7 /* AIX */ > #define ELFOSABI_IRIX 8 /* IRIX */ > #define ELFOSABI_FREEBSD 9 /* FreeBSD */ > #define ELFOSABI_TRU64 10 /* TRU64 UNIX */ > #define ELFOSABI_MODESTO 11 /* Novell Modesto */ > #define ELFOSABI_OPENBSD 12 /* OpenBSD */ > +#define ELFOSABI_OPENVMS 13 /* Open VMS */ > +#define ELFOSABI_NSK 14 /* HP Non-Stop Kernel */ > #define ELFOSABI_ARM 97 /* ARM */ > #define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */ > > +#define ELFOSABI_SYSV ELFOSABI_NONE /* symbol used in old > spec */ > +#define ELFOSABI_MONTEREY ELFOSABI_AIX /* Monterey */ > + > /* e_ident */ > #define IS_ELF(ehdr) ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \ > (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \ > @@ -164,8 +169,10 @@ typedef struct { > #define ET_DYN 3 /* shared object file */ > #define ET_CORE 4 /* core file */ > #define ET_NUM 5 /* number of types */ > -#define ET_LOPROC 0xff00 /* reserved range for processor */ > -#define ET_HIPROC 0xffff /* specific e_type */ > +#define ET_LOOS 0xfe00 /* First operating system > specific. */ > +#define ET_HIOS 0xfeff /* Last operating > system-specific. */ > +#define ET_LOPROC 0xff00 /* First processor-specific. */ > +#define ET_HIPROC 0xffff /* Last processor-specific. */ > > /* e_machine */ > #define EM_NONE 0 /* No Machine */ > @@ -241,25 +248,31 @@ typedef struct { > #define SHN_LORESERVE 0xff00 /* lower bounds of reserved > indexes */ > #define SHN_LOPROC 0xff00 /* reserved range for processor */ > #define SHN_HIPROC 0xff1f /* specific section indexes */ > +#define SHN_LOOS 0xff20 /* First operating system-specific. */ > +#define SHN_HIOS 0xff3f /* Last operating system-specific. */ > #define SHN_ABS 0xfff1 /* absolute value */ > #define SHN_COMMON 0xfff2 /* common symbol */ > #define SHN_XINDEX 0xffff /* Escape -- index stored elsewhere. */ > #define SHN_HIRESERVE 0xffff /* upper bounds of reserved > indexes */ > > /* sh_type */ > -#define SHT_NULL 0 /* inactive */ > -#define SHT_PROGBITS 1 /* program defined information */ > -#define SHT_SYMTAB 2 /* symbol table section */ > -#define SHT_STRTAB 3 /* string table section */ > -#define SHT_RELA 4 /* relocation section with addends*/ > -#define SHT_HASH 5 /* symbol hash table section */ > -#define SHT_DYNAMIC 6 /* dynamic section */ > -#define SHT_NOTE 7 /* note section */ > -#define SHT_NOBITS 8 /* no space section */ > -#define SHT_REL 9 /* relation section without > addends */ > -#define SHT_SHLIB 10 /* reserved - purpose unknown */ > -#define SHT_DYNSYM 11 /* dynamic symbol table section */ > -#define SHT_NUM 12 /* number of section types */ > +#define SHT_NULL 0 /* inactive */ > +#define SHT_PROGBITS 1 /* program defined information */ > +#define SHT_SYMTAB 2 /* symbol table section */ > +#define SHT_STRTAB 3 /* string table section */ > +#define SHT_RELA 4 /* relocation section with addends*/ > +#define SHT_HASH 5 /* symbol hash table section */ > +#define SHT_DYNAMIC 6 /* dynamic section */ > +#define SHT_NOTE 7 /* note section */ > +#define SHT_NOBITS 8 /* no space section */ > +#define SHT_REL 9 /* relation section without > addends */ > +#define SHT_SHLIB 10 /* reserved - purpose unknown */ > +#define SHT_DYNSYM 11 /* dynamic symbol table section */ > +#define SHT_INIT_ARRAY 14 /* Initialization function > pointers. */ > +#define SHT_FINI_ARRAY 15 /* Termination function > pointers. */ > +#define SHT_PREINIT_ARRAY 16 /* Pre-initialization function ptrs. */ > +#define SHT_GROUP 17 /* Section group. */ > +#define SHT_SYMTAB_SHNDX 18 /* Section indexes (see SHN_XINDEX). */ > #define SHT_LOPROC 0x70000000 /* reserved range for processor */ > #define SHT_HIPROC 0x7fffffff /* specific section header types */ > #define SHT_LOUSER 0x80000000 /* reserved range for application */ > @@ -338,15 +351,16 @@ typedef struct { > #define ELF64_ST_TYPE(x) (((unsigned int) x) & 0xf) > #define ELF64_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) > > -/* Symbol Binding - ELF32_ST_BIND - st_info */ > +/* Symbol Binding - ELFNN_ST_BIND - st_info */ > #define STB_LOCAL 0 /* Local symbol */ > #define STB_GLOBAL 1 /* Global symbol */ > #define STB_WEAK 2 /* like global - lower precedence */ > #define STB_NUM 3 /* number of symbol bindings */ > +#define STB_LOOS 10 /* Start of operating system reserved range. */ > #define STB_LOPROC 13 /* reserved range for processor */ > #define STB_HIPROC 15 /* specific symbol bindings */ > > -/* Symbol type - ELF32_ST_TYPE - st_info */ > +/* Symbol type - ELFNN_ST_TYPE - st_info */ > #define STT_NOTYPE 0 /* not specified */ > #define STT_OBJECT 1 /* data object */ > #define STT_FUNC 2 /* function */ -- Karel Gardas <gard...@gmail.com>