116 lines
4.2 KiB
C++
116 lines
4.2 KiB
C++
/*
|
|
* Copyright (C) 2020-2024 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
#include "shared/source/device_binary_format/elf/elf.h"
|
|
#include "shared/source/utilities/arrayref.h"
|
|
#include "shared/source/utilities/const_stringref.h"
|
|
|
|
namespace NEO::Zebin::Elf {
|
|
using namespace NEO::Elf;
|
|
enum ElfTypeZebin : uint16_t {
|
|
ET_ZEBIN_REL = 0xff11, // A relocatable ZE binary file
|
|
ET_ZEBIN_EXE = 0xff12, // An executable ZE binary file
|
|
ET_ZEBIN_DYN = 0xff13, // A shared object ZE binary file
|
|
};
|
|
|
|
enum SectionHeaderTypeZebin : uint32_t {
|
|
SHT_ZEBIN_SPIRV = 0xff000009, // .spv.kernel section, value the same as SHT_OPENCL_SPIRV
|
|
SHT_ZEBIN_ZEINFO = 0xff000011, // .ze_info section
|
|
SHT_ZEBIN_GTPIN_INFO = 0xff000012, // .gtpin_info section
|
|
SHT_ZEBIN_VISA_ASM = 0xff000013, // .visaasm sections
|
|
SHT_ZEBIN_MISC = 0xff000014 // .misc section
|
|
};
|
|
|
|
enum RelocTypeZebin : uint32_t {
|
|
R_ZE_NONE,
|
|
R_ZE_SYM_ADDR,
|
|
R_ZE_SYM_ADDR_32,
|
|
R_ZE_SYM_ADDR_32_HI,
|
|
R_PER_THREAD_PAYLOAD_OFFSET
|
|
};
|
|
|
|
namespace SectionNames {
|
|
inline constexpr ConstStringRef textPrefix = ".text.";
|
|
inline constexpr ConstStringRef functions = ".text.Intel_Symbol_Table_Void_Program";
|
|
inline constexpr ConstStringRef dataConst = ".data.const";
|
|
inline constexpr ConstStringRef dataConstZeroInit = ".bss.const";
|
|
inline constexpr ConstStringRef dataGlobalConst = ".data.global_const";
|
|
inline constexpr ConstStringRef dataGlobal = ".data.global";
|
|
inline constexpr ConstStringRef dataGlobalZeroInit = ".bss.global";
|
|
inline constexpr ConstStringRef dataConstString = ".data.const.string";
|
|
inline constexpr ConstStringRef symtab = ".symtab";
|
|
inline constexpr ConstStringRef relTablePrefix = ".rel.";
|
|
inline constexpr ConstStringRef relaTablePrefix = ".rela.";
|
|
inline constexpr ConstStringRef spv = ".spv";
|
|
inline constexpr ConstStringRef debugPrefix = ".debug_";
|
|
inline constexpr ConstStringRef debugInfo = ".debug_info";
|
|
inline constexpr ConstStringRef debugAbbrev = ".debug_abbrev";
|
|
inline constexpr ConstStringRef zeInfo = ".ze_info";
|
|
inline constexpr ConstStringRef gtpinInfo = ".gtpin_info.";
|
|
inline constexpr ConstStringRef noteIntelGT = ".note.intelgt.compat";
|
|
inline constexpr ConstStringRef buildOptions = ".misc.buildOptions";
|
|
inline constexpr ConstStringRef vIsaAsmPrefix = ".visaasm.";
|
|
inline constexpr ConstStringRef externalFunctions = "Intel_Symbol_Table_Void_Program";
|
|
} // namespace SectionNames
|
|
|
|
inline constexpr ConstStringRef intelGTNoteOwnerName = "IntelGT";
|
|
enum IntelGTSectionType : uint32_t {
|
|
productFamily = 1,
|
|
gfxCore = 2,
|
|
targetMetadata = 3,
|
|
zebinVersion = 4,
|
|
vISAAbiVersion = 5, // for debugger only
|
|
productConfig = 6,
|
|
indirectAccessDetectionVersion = 7,
|
|
lastSupported = indirectAccessDetectionVersion
|
|
};
|
|
struct IntelGTNote {
|
|
IntelGTSectionType type;
|
|
ArrayRef<const uint8_t> data;
|
|
};
|
|
struct ZebinTargetFlags {
|
|
union {
|
|
struct {
|
|
// bit[7:0]: dedicated for specific generator (meaning based on generatorId)
|
|
uint8_t generatorSpecificFlags : 8;
|
|
|
|
// bit[12:8]: values [0-31], min compatbile device revision Id (stepping)
|
|
uint8_t minHwRevisionId : 5;
|
|
|
|
// bit[13:13]:
|
|
// 0 - full validation during decoding (safer decoding)
|
|
// 1 - no validation (faster decoding - recommended for known generators)
|
|
bool validateRevisionId : 1;
|
|
|
|
// bit[14:14]:
|
|
// 0 - ignore minHwRevisionId and maxHwRevisionId
|
|
// 1 - underlying device must match specified revisionId info
|
|
bool disableExtendedValidation : 1;
|
|
|
|
// bit[15:15]:
|
|
// 0 - elfFileHeader::machine is PRODUCT_FAMILY
|
|
// 1 - elfFileHeader::machine is GFXCORE_FAMILY
|
|
bool machineEntryUsesGfxCoreInsteadOfProductFamily : 1;
|
|
|
|
// bit[20:16]: max compatbile device revision Id (stepping)
|
|
uint8_t maxHwRevisionId : 5;
|
|
|
|
// bit[23:21]: generator of this device binary
|
|
// 0 - Unregistered
|
|
// 1 - IGC
|
|
uint8_t generatorId : 3;
|
|
|
|
// bit[31:24]: MBZ, reserved for future use
|
|
};
|
|
uint32_t packed = 0U;
|
|
};
|
|
};
|
|
static_assert(sizeof(ZebinTargetFlags) == sizeof(uint32_t), "");
|
|
|
|
} // namespace NEO::Zebin::Elf
|