// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build linux && (386 || arm)

package runtime

// ELF32 structure definitions for use by the vDSO loader

type elfSym struct {
	st_name  uint32
	st_value uint32
	st_size  uint32
	st_info  byte
	st_other byte
	st_shndx uint16
}

type elfVerdef struct {
	vd_version uint16 /* Version revision */
	vd_flags   uint16 /* Version information */
	vd_ndx     uint16 /* Version Index */
	vd_cnt     uint16 /* Number of associated aux entries */
	vd_hash    uint32 /* Version name hash value */
	vd_aux     uint32 /* Offset in bytes to verdaux array */
	vd_next    uint32 /* Offset in bytes to next verdef entry */
}

type elfEhdr struct {
	e_ident     [_EI_NIDENT]byte /* Magic number and other info */
	e_type      uint16           /* Object file type */
	e_machine   uint16           /* Architecture */
	e_version   uint32           /* Object file version */
	e_entry     uint32           /* Entry point virtual address */
	e_phoff     uint32           /* Program header table file offset */
	e_shoff     uint32           /* Section header table file offset */
	e_flags     uint32           /* Processor-specific flags */
	e_ehsize    uint16           /* ELF header size in bytes */
	e_phentsize uint16           /* Program header table entry size */
	e_phnum     uint16           /* Program header table entry count */
	e_shentsize uint16           /* Section header table entry size */
	e_shnum     uint16           /* Section header table entry count */
	e_shstrndx  uint16           /* Section header string table index */
}

type elfPhdr struct {
	p_type   uint32 /* Segment type */
	p_offset uint32 /* Segment file offset */
	p_vaddr  uint32 /* Segment virtual address */
	p_paddr  uint32 /* Segment physical address */
	p_filesz uint32 /* Segment size in file */
	p_memsz  uint32 /* Segment size in memory */
	p_flags  uint32 /* Segment flags */
	p_align  uint32 /* Segment alignment */
}

type elfShdr struct {
	sh_name      uint32 /* Section name (string tbl index) */
	sh_type      uint32 /* Section type */
	sh_flags     uint32 /* Section flags */
	sh_addr      uint32 /* Section virtual addr at execution */
	sh_offset    uint32 /* Section file offset */
	sh_size      uint32 /* Section size in bytes */
	sh_link      uint32 /* Link to another section */
	sh_info      uint32 /* Additional section information */
	sh_addralign uint32 /* Section alignment */
	sh_entsize   uint32 /* Entry size if section holds table */
}

type elfDyn struct {
	d_tag int32  /* Dynamic entry type */
	d_val uint32 /* Integer value */
}

type elfVerdaux struct {
	vda_name uint32 /* Version or dependency names */
	vda_next uint32 /* Offset in bytes to next verdaux entry */
}
