18bf80f4bSopenharmony_ci/*
28bf80f4bSopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd.
38bf80f4bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
48bf80f4bSopenharmony_ci * you may not use this file except in compliance with the License.
58bf80f4bSopenharmony_ci * You may obtain a copy of the License at
68bf80f4bSopenharmony_ci *
78bf80f4bSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
88bf80f4bSopenharmony_ci *
98bf80f4bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
108bf80f4bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
118bf80f4bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
128bf80f4bSopenharmony_ci * See the License for the specific language governing permissions and
138bf80f4bSopenharmony_ci * limitations under the License.
148bf80f4bSopenharmony_ci */
158bf80f4bSopenharmony_ci#ifndef __LUME_ELF_64__
168bf80f4bSopenharmony_ci#define __LUME_ELF_64__
178bf80f4bSopenharmony_ci#include "elf_common.h"
188bf80f4bSopenharmony_ci
198bf80f4bSopenharmony_ci#define ELF64_ST_VISIBILITY(o) ((o)&0x3)
208bf80f4bSopenharmony_ci
218bf80f4bSopenharmony_citypedef uint64_t Elf64_Addr;
228bf80f4bSopenharmony_citypedef uint64_t Elf64_Off;
238bf80f4bSopenharmony_citypedef uint16_t Elf64_Half;
248bf80f4bSopenharmony_citypedef uint32_t Elf64_Word;
258bf80f4bSopenharmony_citypedef uint64_t Elf64_Xword;
268bf80f4bSopenharmony_ci
278bf80f4bSopenharmony_citypedef struct {
288bf80f4bSopenharmony_ci    ElfIdent e_ident = { 0x7f, 'E', 'L', 'F', ELFCLASS64, ELFDATA2LSB, EV_CURRENT, ELFOSABI_NONE };
298bf80f4bSopenharmony_ci    Elf64_Half e_type;
308bf80f4bSopenharmony_ci    Elf64_Half e_machine;
318bf80f4bSopenharmony_ci    Elf64_Word e_version;
328bf80f4bSopenharmony_ci    Elf64_Addr e_entry;
338bf80f4bSopenharmony_ci    Elf64_Off e_phoff;
348bf80f4bSopenharmony_ci    Elf64_Off e_shoff;
358bf80f4bSopenharmony_ci    Elf64_Word e_flags;
368bf80f4bSopenharmony_ci    Elf64_Half e_ehsize;
378bf80f4bSopenharmony_ci    Elf64_Half e_phentsize;
388bf80f4bSopenharmony_ci    Elf64_Half e_phnum;
398bf80f4bSopenharmony_ci    Elf64_Half e_shentsize;
408bf80f4bSopenharmony_ci    Elf64_Half e_shnum;
418bf80f4bSopenharmony_ci    Elf64_Half e_shstrndx;
428bf80f4bSopenharmony_ci} Elf64_Ehdr;
438bf80f4bSopenharmony_ci
448bf80f4bSopenharmony_citypedef struct elf64_shdr {
458bf80f4bSopenharmony_ci    Elf64_Word sh_name;
468bf80f4bSopenharmony_ci    Elf64_Word sh_type;
478bf80f4bSopenharmony_ci    Elf64_Xword sh_flags;
488bf80f4bSopenharmony_ci    Elf64_Addr sh_addr;
498bf80f4bSopenharmony_ci    Elf64_Off sh_offset;
508bf80f4bSopenharmony_ci    Elf64_Xword sh_size;
518bf80f4bSopenharmony_ci    Elf64_Word sh_link;
528bf80f4bSopenharmony_ci    Elf64_Word sh_info;
538bf80f4bSopenharmony_ci    Elf64_Xword sh_addralign;
548bf80f4bSopenharmony_ci    Elf64_Xword sh_entsize;
558bf80f4bSopenharmony_ci} Elf64_Shdr;
568bf80f4bSopenharmony_ci
578bf80f4bSopenharmony_citypedef struct {
588bf80f4bSopenharmony_ci    Elf64_Word st_name;
598bf80f4bSopenharmony_ci    unsigned char st_info;
608bf80f4bSopenharmony_ci    unsigned char st_other;
618bf80f4bSopenharmony_ci    Elf64_Half st_shndx;
628bf80f4bSopenharmony_ci    Elf64_Addr st_value;
638bf80f4bSopenharmony_ci    Elf64_Xword st_size;
648bf80f4bSopenharmony_ci} Elf64_Sym;
658bf80f4bSopenharmony_ci#endif