Elf_Addr
static inline struct got_entry *get_got_entry(Elf_Addr val,
Elf_Addr symbol_addr;
Elf_Addr symbol_addr;
Elf_Addr module_emit_got_entry(struct module *mod, Elf_Shdr *sechdrs, Elf_Addr val);
Elf_Addr module_emit_plt_entry(struct module *mod, Elf_Shdr *sechdrs, Elf_Addr val);
static inline struct got_entry emit_got_entry(Elf_Addr val)
Elf_Addr module_emit_got_entry(struct module *mod, Elf_Shdr *sechdrs, Elf_Addr val)
return (Elf_Addr)got;
return (Elf_Addr)&got[i];
Elf_Addr module_emit_plt_entry(struct module *mod, Elf_Shdr *sechdrs, Elf_Addr val)
return (Elf_Addr)plt;
return (Elf_Addr)&plt[nr];
static int apply_r_larch_sop_push_dup(struct module *mod, u32 *location, Elf_Addr v,
Elf_Shdr *sechdrs, u32 *location, Elf_Addr v,
static int apply_r_larch_sop(struct module *mod, u32 *location, Elf_Addr v,
static int apply_r_larch_sop_imm_field(struct module *mod, u32 *location, Elf_Addr v,
static int apply_r_larch_add_sub(struct module *mod, u32 *location, Elf_Addr v,
Elf_Shdr *sechdrs, u32 *location, Elf_Addr v,
static int apply_r_larch_pcadd(struct module *mod, u32 *location, Elf_Addr v,
s32 offset_hi20 = (void *)((v + 0x800)) - (void *)((Elf_Addr)location);
typedef int (*reloc_rela_handler)(struct module *mod, u32 *location, Elf_Addr v,
static int apply_r_larch_pcala(struct module *mod, u32 *location, Elf_Addr v,
(void *)((Elf_Addr)location & ~0xfff);
Elf_Addr anchor = (((Elf_Addr)location) & ~0xfff) + offset_hi20;
Elf_Shdr *sechdrs, u32 *location, Elf_Addr v,
static int apply_r_larch_32_pcrel(struct module *mod, u32 *location, Elf_Addr v,
static int apply_r_larch_64_pcrel(struct module *mod, u32 *location, Elf_Addr v,
Elf_Addr v;
static int apply_r_larch_none(struct module *mod, u32 *location, Elf_Addr v,
static int apply_r_larch_error(struct module *me, u32 *location, Elf_Addr v,
static int apply_r_larch_32(struct module *mod, u32 *location, Elf_Addr v,
static int apply_r_larch_64(struct module *mod, u32 *location, Elf_Addr v,
*(Elf_Addr *)location = v;
static int apply_r_larch_sop_push_pcrel(struct module *mod, u32 *location, Elf_Addr v,
static int apply_r_larch_sop_push_absolute(struct module *mod, u32 *location, Elf_Addr v,
Elf_Addr val, vallo;
Elf_Addr v, unsigned int bits)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
static int apply_r_mips_64(u32 *location, Elf_Addr v, bool rela)
*(Elf_Addr *)location = v;
static int apply_r_mips_higher(u32 *location, Elf_Addr v, bool rela)
static int apply_r_mips_highest(u32 *location, Elf_Addr v, bool rela)
Elf_Addr *addr;
Elf_Addr v, bool rela)
Elf_Addr value;
Elf_Addr v;
static void apply_r_mips_32(u32 *location, u32 base, Elf_Addr v)
Elf_Addr v)
static int apply_r_mips_hi16(struct module *me, u32 *location, Elf_Addr v,
n->addr = (Elf_Addr *)location;
u32 base, Elf_Addr v, bool rela)
static Elf_Addr get_fdesc(struct module *me, unsigned long value)
return (Elf_Addr)fdesc;
fdesc->gp = (Elf_Addr)me->mem[MOD_TEXT].base + me->arch.got_offset;
return (Elf_Addr)fdesc;
static Elf_Addr get_stub(struct module *me, unsigned long value, long addend,
enum elf_stub_type stub_type, Elf_Addr loc0, unsigned int targetsec)
return (Elf_Addr)stub;
Elf_Addr loc0;
Elf_Addr loc0;
gp = (Elf_Addr)me->mem[MOD_TEXT].base + me->arch.got_offset;
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
static int apply_r_riscv_add8_rela(struct module *me, void *location, Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr value;
Elf_Addr v)
static int apply_r_riscv_sub8_rela(struct module *me, void *location, Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
static int tls_not_supported(struct module *me, void *location, Elf_Addr v)
int (*reloc_handler)(struct module *me, void *location, Elf_Addr v);
static int apply_r_riscv_sub6_rela(struct module *me, void *location, Elf_Addr v)
static int apply_r_riscv_set6_rela(struct module *me, void *location, Elf_Addr v)
static int apply_r_riscv_set8_rela(struct module *me, void *location, Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
Elf_Addr v)
static int apply_r_riscv_set_uleb128(struct module *me, void *location, Elf_Addr v)
static int apply_r_riscv_sub_uleb128(struct module *me, void *location, Elf_Addr v)
unsigned int hashtable_bits, Elf_Addr v,
int (*handler)(struct module *me, void *location, Elf_Addr v);
Elf_Addr v;
static int apply_r_riscv_32_rela(struct module *me, void *location, Elf_Addr v)
static int apply_r_riscv_64_rela(struct module *me, void *location, Elf_Addr v)
Elf_Addr v)
Elf_Addr addr = (rela->r_offset - va_kernel_link_pa_offset);
Elf_Addr relocated_addr = rela->r_addend;
*(Elf_Addr *)addr = relocated_addr;
Elf_Addr entry;
static int apply_rela_bits(Elf_Addr loc, Elf_Addr val,
val = (Elf_Addr)(((long) val) >> shift);
static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
Elf_Addr loc, val;
Elf_Addr *gotent = me->mem[MOD_TEXT].base +
val += (Elf_Addr)me->mem[MOD_TEXT].base +
val = (Elf_Addr) me->mem[MOD_TEXT].base +
((Elf_Addr) me->mem[MOD_TEXT].base + me->arch.got_offset);
val = (Elf_Addr) me->mem[MOD_TEXT].base + me->arch.got_offset +
Elf_Addr base;
v -= (Elf_Addr) location;
v -= (Elf_Addr) location;
v -= (Elf_Addr) location;
Elf_Addr v;
v -= (Elf_Addr) location;
unsigned int fsecndx, const char *fromsec, Elf_Addr faddr,
const char *tosec, Elf_Addr taddr)
Elf_Addr faddr, const char *secname,
Elf_Addr faddr, Elf_Addr taddr)
static Elf_Addr addend_386_rel(uint32_t *location, unsigned int r_type)
return (Elf_Addr)(-1);
static Elf_Addr addend_arm_rel(void *loc, Elf_Sym *sym, unsigned int r_type)
return (Elf_Addr)(-1);
static Elf_Addr addend_mips_rel(uint32_t *location, unsigned int r_type)
return (Elf_Addr)(-1);
Elf_Addr taddr, r_offset;
Elf_Addr taddr, r_offset;
#define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
static Elf_Sym *find_fromsym(struct elf_info *elf, Elf_Addr addr,
static Elf_Sym *find_tosym(struct elf_info *elf, Elf_Addr addr, Elf_Sym *sym)
Elf_Sym *symsearch_find_nearest(struct elf_info *elf, Elf_Addr addr,
Elf_Addr min_distance);
Elf_Addr addr;
Elf_Sym *symsearch_find_nearest(struct elf_info *elf, Elf_Addr addr,
Elf_Addr min_distance)
static Elf_Addr old_r_offset = ~(Elf_Addr)0;
Elf_Addr current_r_offset = _w(rp->r_offset);
is_fake = (old_r_offset != ~(Elf_Addr)0) &&