aboutsummaryrefslogtreecommitdiff
path: root/tccelf.c
diff options
context:
space:
mode:
Diffstat (limited to 'tccelf.c')
-rw-r--r--tccelf.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/tccelf.c b/tccelf.c
index e5cd01b..61d852c 100644
--- a/tccelf.c
+++ b/tccelf.c
@@ -898,7 +898,8 @@ ST_FUNC void relocate_section(TCCState *s1, Section *s)
/* XXX: this logic may depend on TCC's codegen
now TCC uses R_X86_64_32 even for a 64bit pointer */
qrel->r_info = ELFW(R_INFO)(0, R_X86_64_RELATIVE);
- qrel->r_addend = read32le(ptr) + val;
+ /* Use sign extension! */
+ qrel->r_addend = (int)read32le(ptr) + val;
qrel++;
}
write32le(ptr, read32le(ptr) + val);
@@ -911,7 +912,8 @@ ST_FUNC void relocate_section(TCCState *s1, Section *s)
if (esym_index) {
qrel->r_offset = rel->r_offset;
qrel->r_info = ELFW(R_INFO)(esym_index, R_X86_64_PC32);
- qrel->r_addend = read32le(ptr);
+ /* Use sign extension! */
+ qrel->r_addend = (int)read32le(ptr);
qrel++;
break;
}