|
@@ -37,7 +37,7 @@ static int apply_r_riscv_64_rela(struct module *me, u32 *location, Elf_Addr v)
|
|
|
static int apply_r_riscv_branch_rela(struct module *me, u32 *location,
|
|
|
Elf_Addr v)
|
|
|
{
|
|
|
- s64 offset = (void *)v - (void *)location;
|
|
|
+ ptrdiff_t offset = (void *)v - (void *)location;
|
|
|
u32 imm12 = (offset & 0x1000) << (31 - 12);
|
|
|
u32 imm11 = (offset & 0x800) >> (11 - 7);
|
|
|
u32 imm10_5 = (offset & 0x7e0) << (30 - 10);
|
|
@@ -50,7 +50,7 @@ static int apply_r_riscv_branch_rela(struct module *me, u32 *location,
|
|
|
static int apply_r_riscv_jal_rela(struct module *me, u32 *location,
|
|
|
Elf_Addr v)
|
|
|
{
|
|
|
- s64 offset = (void *)v - (void *)location;
|
|
|
+ ptrdiff_t offset = (void *)v - (void *)location;
|
|
|
u32 imm20 = (offset & 0x100000) << (31 - 20);
|
|
|
u32 imm19_12 = (offset & 0xff000);
|
|
|
u32 imm11 = (offset & 0x800) << (20 - 11);
|
|
@@ -63,7 +63,7 @@ static int apply_r_riscv_jal_rela(struct module *me, u32 *location,
|
|
|
static int apply_r_riscv_rcv_branch_rela(struct module *me, u32 *location,
|
|
|
Elf_Addr v)
|
|
|
{
|
|
|
- s64 offset = (void *)v - (void *)location;
|
|
|
+ ptrdiff_t offset = (void *)v - (void *)location;
|
|
|
u16 imm8 = (offset & 0x100) << (12 - 8);
|
|
|
u16 imm7_6 = (offset & 0xc0) >> (6 - 5);
|
|
|
u16 imm5 = (offset & 0x20) >> (5 - 2);
|
|
@@ -78,7 +78,7 @@ static int apply_r_riscv_rcv_branch_rela(struct module *me, u32 *location,
|
|
|
static int apply_r_riscv_rvc_jump_rela(struct module *me, u32 *location,
|
|
|
Elf_Addr v)
|
|
|
{
|
|
|
- s64 offset = (void *)v - (void *)location;
|
|
|
+ ptrdiff_t offset = (void *)v - (void *)location;
|
|
|
u16 imm11 = (offset & 0x800) << (12 - 11);
|
|
|
u16 imm10 = (offset & 0x400) >> (10 - 8);
|
|
|
u16 imm9_8 = (offset & 0x300) << (12 - 11);
|
|
@@ -96,7 +96,7 @@ static int apply_r_riscv_rvc_jump_rela(struct module *me, u32 *location,
|
|
|
static int apply_r_riscv_pcrel_hi20_rela(struct module *me, u32 *location,
|
|
|
Elf_Addr v)
|
|
|
{
|
|
|
- s64 offset = (void *)v - (void *)location;
|
|
|
+ ptrdiff_t offset = (void *)v - (void *)location;
|
|
|
s32 hi20;
|
|
|
|
|
|
if (offset != (s32)offset) {
|
|
@@ -178,7 +178,7 @@ static int apply_r_riscv_lo12_s_rela(struct module *me, u32 *location,
|
|
|
static int apply_r_riscv_got_hi20_rela(struct module *me, u32 *location,
|
|
|
Elf_Addr v)
|
|
|
{
|
|
|
- s64 offset = (void *)v - (void *)location;
|
|
|
+ ptrdiff_t offset = (void *)v - (void *)location;
|
|
|
s32 hi20;
|
|
|
|
|
|
/* Always emit the got entry */
|
|
@@ -200,7 +200,7 @@ static int apply_r_riscv_got_hi20_rela(struct module *me, u32 *location,
|
|
|
static int apply_r_riscv_call_plt_rela(struct module *me, u32 *location,
|
|
|
Elf_Addr v)
|
|
|
{
|
|
|
- s64 offset = (void *)v - (void *)location;
|
|
|
+ ptrdiff_t offset = (void *)v - (void *)location;
|
|
|
s32 fill_v = offset;
|
|
|
u32 hi20, lo12;
|
|
|
|
|
@@ -227,7 +227,7 @@ static int apply_r_riscv_call_plt_rela(struct module *me, u32 *location,
|
|
|
static int apply_r_riscv_call_rela(struct module *me, u32 *location,
|
|
|
Elf_Addr v)
|
|
|
{
|
|
|
- s64 offset = (void *)v - (void *)location;
|
|
|
+ ptrdiff_t offset = (void *)v - (void *)location;
|
|
|
s32 fill_v = offset;
|
|
|
u32 hi20, lo12;
|
|
|
|
|
@@ -347,7 +347,7 @@ int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,
|
|
|
unsigned int j;
|
|
|
|
|
|
for (j = 0; j < sechdrs[relsec].sh_size / sizeof(*rel); j++) {
|
|
|
- u64 hi20_loc =
|
|
|
+ unsigned long hi20_loc =
|
|
|
sechdrs[sechdrs[relsec].sh_info].sh_addr
|
|
|
+ rel[j].r_offset;
|
|
|
u32 hi20_type = ELF_RISCV_R_TYPE(rel[j].r_info);
|
|
@@ -360,12 +360,12 @@ int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,
|
|
|
Elf_Sym *hi20_sym =
|
|
|
(Elf_Sym *)sechdrs[symindex].sh_addr
|
|
|
+ ELF_RISCV_R_SYM(rel[j].r_info);
|
|
|
- u64 hi20_sym_val =
|
|
|
+ unsigned long hi20_sym_val =
|
|
|
hi20_sym->st_value
|
|
|
+ rel[j].r_addend;
|
|
|
|
|
|
/* Calculate lo12 */
|
|
|
- u64 offset = hi20_sym_val - hi20_loc;
|
|
|
+ size_t offset = hi20_sym_val - hi20_loc;
|
|
|
if (IS_ENABLED(CONFIG_MODULE_SECTIONS)
|
|
|
&& hi20_type == R_RISCV_GOT_HI20) {
|
|
|
offset = module_emit_got_entry(
|