GEL  0.99
plugarch20.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <gel/error.h>
#include <gel/gel_plugin.h>
#include <gel/gel_elf.h>
#include "gel_mem.h"

Macros

#define R_PPC_NONE   0
 
#define R_PPC_ADDR32   1
 
#define R_PPC_ADDR24   2
 
#define R_PPC_ADDR16   3
 
#define R_PPC_ADDR16_LO   4
 
#define R_PPC_ADDR16_HI   5
 
#define R_PPC_ADDR16_HA   6
 
#define R_PPC_ADDR14   7
 
#define R_PPC_ADDR14_BRTAKEN   8
 
#define R_PPC_ADDR14_BRNTAKEN   9
 
#define R_PPC_REL24   10
 
#define R_PPC_REL14   11
 
#define R_PPC_REL14_BRTAKEN   12
 
#define R_PPC_REL14_BRNTAKEN   13
 
#define R_PPC_GOT16   14
 
#define R_PPC_GOT16_LO   15
 
#define R_PPC_GOT16_HI   16
 
#define R_PPC_GOT16_HA   17
 
#define R_PPC_PLTREL24   18
 
#define R_PPC_COPY   19
 
#define R_PPC_GLOB_DAT   20
 
#define R_PPC_JMP_SLOT   21
 
#define R_PPC_RELATIVE   22
 
#define R_PPC_LOCAL24PC   23
 
#define R_PPC_UADDR32   24
 
#define R_PPC_UADDR16   25
 
#define R_PPC_REL32   26
 
#define R_PPC_PLT32   27
 
#define R_PPC_PLTREL32   28
 
#define R_PPC_PLT16_LO   29
 
#define R_PPC_PLT16_HI   30
 
#define R_PPC_PLT16_HA   31
 
#define R_PPC_SDAREL16   32
 
#define R_PPC_SECTOFF   33
 
#define R_PPC_SECTOFF_LO   34
 
#define R_PPC_SECTOFF_HI   35
 
#define R_PPC_SECTOFF_HA   36
 
#define R_PPC_ADDR30   37
 
#define LO(x)   ((x) & 0xFFFF)
 
#define HI(x)   (((x) >> 16) & 0xFFFF)
 
#define HA(x)   ((((x) >> 16) + (((x) & 0x8000) ? 1 : 0)) & 0xFFFF)
 
#define USESYM   ((symi.sect == SHN_UNDEF) ? (symi2) : (symi))
 
#define PLT_PLTCALL   24
 
#define PLT_RESERVE   72
 
#define PLT_REL_PLTCALL_HA   (24 + 2)
 
#define PLT_REL_PLTCALL_LO   (24 + 2 + 4)
 
#define PLT_ENTSIZE   8
 
#define PLT_REL_PLTCALL   4
 

Functions

int build_plt (gel_sect_t *s)
 
int real_do_reloc (gel_image_t *im, gel_hash_t h, int flags, int do_copy)
 
int do_reloc (gel_image_t *im, int flags)
 

Variables

int gel_errno
 
char plt_prefix []
 
char plt_entry []
 
arch_plugin_t plugin_arch
 
sys_plugin_t null_plugin_sys
 
sys_plugin_tplugin_sys = &null_plugin_sys
 

Macro Definition Documentation

◆ HA

#define HA (   x)    ((((x) >> 16) + (((x) & 0x8000) ? 1 : 0)) & 0xFFFF)

◆ HI

#define HI (   x)    (((x) >> 16) & 0xFFFF)

◆ LO

#define LO (   x)    ((x) & 0xFFFF)

◆ PLT_ENTSIZE

#define PLT_ENTSIZE   8

◆ PLT_PLTCALL

#define PLT_PLTCALL   24

◆ PLT_REL_PLTCALL

#define PLT_REL_PLTCALL   4

◆ PLT_REL_PLTCALL_HA

#define PLT_REL_PLTCALL_HA   (24 + 2)

◆ PLT_REL_PLTCALL_LO

#define PLT_REL_PLTCALL_LO   (24 + 2 + 4)

◆ PLT_RESERVE

#define PLT_RESERVE   72

◆ R_PPC_ADDR14

#define R_PPC_ADDR14   7

◆ R_PPC_ADDR14_BRNTAKEN

#define R_PPC_ADDR14_BRNTAKEN   9

◆ R_PPC_ADDR14_BRTAKEN

#define R_PPC_ADDR14_BRTAKEN   8

◆ R_PPC_ADDR16

#define R_PPC_ADDR16   3

◆ R_PPC_ADDR16_HA

#define R_PPC_ADDR16_HA   6

◆ R_PPC_ADDR16_HI

#define R_PPC_ADDR16_HI   5

◆ R_PPC_ADDR16_LO

#define R_PPC_ADDR16_LO   4

◆ R_PPC_ADDR24

#define R_PPC_ADDR24   2

◆ R_PPC_ADDR30

#define R_PPC_ADDR30   37

◆ R_PPC_ADDR32

#define R_PPC_ADDR32   1

◆ R_PPC_COPY

#define R_PPC_COPY   19

◆ R_PPC_GLOB_DAT

#define R_PPC_GLOB_DAT   20

◆ R_PPC_GOT16

#define R_PPC_GOT16   14

◆ R_PPC_GOT16_HA

#define R_PPC_GOT16_HA   17

◆ R_PPC_GOT16_HI

#define R_PPC_GOT16_HI   16

◆ R_PPC_GOT16_LO

#define R_PPC_GOT16_LO   15

◆ R_PPC_JMP_SLOT

#define R_PPC_JMP_SLOT   21

◆ R_PPC_LOCAL24PC

#define R_PPC_LOCAL24PC   23

◆ R_PPC_NONE

#define R_PPC_NONE   0

◆ R_PPC_PLT16_HA

#define R_PPC_PLT16_HA   31

◆ R_PPC_PLT16_HI

#define R_PPC_PLT16_HI   30

◆ R_PPC_PLT16_LO

#define R_PPC_PLT16_LO   29

◆ R_PPC_PLT32

#define R_PPC_PLT32   27

◆ R_PPC_PLTREL24

#define R_PPC_PLTREL24   18

◆ R_PPC_PLTREL32

#define R_PPC_PLTREL32   28

◆ R_PPC_REL14

#define R_PPC_REL14   11

◆ R_PPC_REL14_BRNTAKEN

#define R_PPC_REL14_BRNTAKEN   13

◆ R_PPC_REL14_BRTAKEN

#define R_PPC_REL14_BRTAKEN   12

◆ R_PPC_REL24

#define R_PPC_REL24   10

◆ R_PPC_REL32

#define R_PPC_REL32   26

◆ R_PPC_RELATIVE

#define R_PPC_RELATIVE   22

◆ R_PPC_SDAREL16

#define R_PPC_SDAREL16   32

◆ R_PPC_SECTOFF

#define R_PPC_SECTOFF   33

◆ R_PPC_SECTOFF_HA

#define R_PPC_SECTOFF_HA   36

◆ R_PPC_SECTOFF_HI

#define R_PPC_SECTOFF_HI   35

◆ R_PPC_SECTOFF_LO

#define R_PPC_SECTOFF_LO   34

◆ R_PPC_UADDR16

#define R_PPC_UADDR16   25

◆ R_PPC_UADDR32

#define R_PPC_UADDR32   24

◆ USESYM

#define USESYM   ((symi.sect == SHN_UNDEF) ? (symi2) : (symi))

Function Documentation

◆ build_plt()

int build_plt ( gel_sect_t s)

Build the PLT.

Parameters
sPLT section.
Returns
Error code.

◆ do_reloc()

int do_reloc ( gel_image_t im,
int  flags 
)

Perform the relocation.

Parameters
imImage to work on.
flagsFlags to use.
Returns
Error code.

◆ real_do_reloc()

int real_do_reloc ( gel_image_t im,
gel_hash_t  h,
int  flags,
int  do_copy 
)

Perform the relocation

Parameters
imImage to work on.
hHashing table (symbol, cursor) defining sources address of relocations R_xxx_COPY
flagsFlags
do_copyPass number (0 == normal, 1 == do R_xxx_COPY)
Returns
Error code.

< This image's info

< Current block's info

< Symbol block's info

< Container file's info

< Current section

< Section being relocated

< Current section's info

< Symtab section of the current object

< Info of the section defining the symbol

< rel sect. cursor / block cursor / block source cursor

< Symbol used by the relocation

< Sym info for s1 and s2

< Current RELA entry

< Relocation values

< Temp. storage for reloc. calculations (32 bits)

< Idem 16bits

< Idem 8bits

< Location of Small Data Area (PowerPC)

Variable Documentation

◆ null_plugin_sys

sys_plugin_t null_plugin_sys
extern

Null plugin for architecture.

◆ plt_entry

char plt_entry[]
Initial value:
=
"\x39\x60\x00\x00"

◆ plt_prefix

char plt_prefix[]
Initial value:
=
"\x60\x00\x00\x00"
"\x60\x00\x00\x00"
"\x60\x00\x00\x00"
"\x60\x00\x00\x00"
"\x60\x00\x00\x00"
"\x60\x00\x00\x00"
"\x3d\x6b\x12\x34"
"\x81\x6b\x56\x78"
"\x7d\x69\x03\xa6"
"\x4e\x80\x04\x20"
"\x60\x00\x00\x00"
"\x60\x00\x00\x00"
"\x60\x00\x00\x00"
"\x60\x00\x00\x00"
"\x60\x00\x00\x00"
"\x60\x00\x00\x00"
"\x60\x00\x00\x00"
"\x60\x00\x00\x00"

◆ plugin_arch

arch_plugin_t plugin_arch
Initial value:
= {
20,
1,
4,
NULL,
1,
4096
}
int do_reloc(gel_image_t *im, int flags)
Definition: plugarch20.c:703

◆ plugin_sys

sys_plugin_t* plugin_sys = &null_plugin_sys