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_32__
168bf80f4bSopenharmony_ci#define __LUME_ELF_32__
178bf80f4bSopenharmony_ci#include "elf_common.h"
188bf80f4bSopenharmony_ci
198bf80f4bSopenharmony_ci#define ELF32_ST_VISIBILITY(o) ((o)&0x3)
208bf80f4bSopenharmony_ci
218bf80f4bSopenharmony_citypedef uint32_t Elf32_Addr;
228bf80f4bSopenharmony_citypedef uint32_t Elf32_Off;
238bf80f4bSopenharmony_citypedef uint16_t Elf32_Half;
248bf80f4bSopenharmony_citypedef uint32_t Elf32_Word;
258bf80f4bSopenharmony_ci
268bf80f4bSopenharmony_citypedef struct {
278bf80f4bSopenharmony_ci    ElfIdent e_ident = { 0x7f, 'E', 'L', 'F', ELFCLASS32, ELFDATA2LSB, EV_CURRENT, ELFOSABI_NONE };
288bf80f4bSopenharmony_ci    Elf32_Half e_type;
298bf80f4bSopenharmony_ci    Elf32_Half e_machine;
308bf80f4bSopenharmony_ci    Elf32_Word e_version;
318bf80f4bSopenharmony_ci    Elf32_Addr e_entry;
328bf80f4bSopenharmony_ci    Elf32_Off e_phoff;
338bf80f4bSopenharmony_ci    Elf32_Off e_shoff;
348bf80f4bSopenharmony_ci    Elf32_Word e_flags;
358bf80f4bSopenharmony_ci    Elf32_Half e_ehsize;
368bf80f4bSopenharmony_ci    Elf32_Half e_phentsize;
378bf80f4bSopenharmony_ci    Elf32_Half e_phnum;
388bf80f4bSopenharmony_ci    Elf32_Half e_shentsize;
398bf80f4bSopenharmony_ci    Elf32_Half e_shnum;
408bf80f4bSopenharmony_ci    Elf32_Half e_shstrndx;
418bf80f4bSopenharmony_ci} Elf32_Ehdr;
428bf80f4bSopenharmony_ci
438bf80f4bSopenharmony_citypedef struct elf32_shdr {
448bf80f4bSopenharmony_ci    Elf32_Word sh_name;
458bf80f4bSopenharmony_ci    Elf32_Word sh_type;
468bf80f4bSopenharmony_ci    Elf32_Word sh_flags;
478bf80f4bSopenharmony_ci    Elf32_Addr sh_addr;
488bf80f4bSopenharmony_ci    Elf32_Off sh_offset;
498bf80f4bSopenharmony_ci    Elf32_Word sh_size;
508bf80f4bSopenharmony_ci    Elf32_Word sh_link;
518bf80f4bSopenharmony_ci    Elf32_Word sh_info;
528bf80f4bSopenharmony_ci    Elf32_Word sh_addralign;
538bf80f4bSopenharmony_ci    Elf32_Word sh_entsize;
548bf80f4bSopenharmony_ci} Elf32_Shdr;
558bf80f4bSopenharmony_ci
568bf80f4bSopenharmony_citypedef struct {
578bf80f4bSopenharmony_ci    Elf32_Word st_name;
588bf80f4bSopenharmony_ci    Elf32_Addr st_value;
598bf80f4bSopenharmony_ci    Elf32_Word st_size;
608bf80f4bSopenharmony_ci    unsigned char st_info;
618bf80f4bSopenharmony_ci    unsigned char st_other;
628bf80f4bSopenharmony_ci    Elf32_Half st_shndx;
638bf80f4bSopenharmony_ci} Elf32_Sym;
648bf80f4bSopenharmony_ci#endif