EnvironmentLoader/source/ElfUtils.h

55 lines
1.5 KiB
C
Raw Normal View History

2021-12-25 20:14:56 +01:00
#pragma once
#include "common/relocation_defines.h"
#include "module/RelocationData.h"
2021-12-25 20:14:56 +01:00
#include <cstdint>
#include <cstdio>
#include <memory>
#include <vector>
#ifdef __cplusplus
extern "C" {
#endif
2022-02-13 14:25:28 +01:00
#define R_PPC_NONE 0
#define R_PPC_ADDR32 1
#define R_PPC_ADDR16_LO 4
#define R_PPC_ADDR16_HI 5
#define R_PPC_ADDR16_HA 6
#define R_PPC_REL24 10
#define R_PPC_REL14 11
#define R_PPC_DTPMOD32 68
#define R_PPC_DTPREL32 78
#define R_PPC_EMB_SDA21 109
#define R_PPC_EMB_RELSDA 116
#define R_PPC_DIAB_SDA21_LO 180
#define R_PPC_DIAB_SDA21_HI 181
#define R_PPC_DIAB_SDA21_HA 182
#define R_PPC_DIAB_RELSDA_LO 183
#define R_PPC_DIAB_RELSDA_HI 184
#define R_PPC_DIAB_RELSDA_HA 185
#define R_PPC_GHS_REL16_HA 251
#define R_PPC_GHS_REL16_HI 252
#define R_PPC_GHS_REL16_LO 253
2021-12-25 20:14:56 +01:00
// Masks for manipulating Power PC relocation targets
2022-02-13 14:25:28 +01:00
#define PPC_WORD32 0xFFFFFFFF
#define PPC_WORD30 0xFFFFFFFC
#define PPC_LOW24 0x03FFFFFC
#define PPC_LOW14 0x0020FFFC
#define PPC_HALF16 0xFFFF
2021-12-25 20:14:56 +01:00
#ifdef __cplusplus
}
#endif
class ElfUtils {
public:
2022-05-13 16:14:46 +02:00
static bool elfLinkOne(char type, size_t offset, int32_t addend, uint32_t destination, uint32_t symbol_addr, relocation_trampoline_entry_t *trampolin_data, uint32_t trampolin_data_length,
2021-12-25 20:14:56 +01:00
RelocationType reloc_type);
2022-05-13 17:01:19 +02:00
static bool doRelocation(const std::vector<std::unique_ptr<RelocationData>> &relocData, relocation_trampoline_entry_t *tramp_data, uint32_t tramp_length);
2021-12-25 20:14:56 +01:00
};