those happen on SUSE systems.
Unified · Split
| @@ -37,8 +37,14 @@ int code_reloc (int reloc_type) · 36 unmodified lines | ||
| 37 | 37 | case R_RISCV_PCREL_LO12_I: |
| 38 | 38 | case R_RISCV_PCREL_LO12_S: |
| 39 | 39 | case R_RISCV_32_PCREL: |
| 40 | + case R_RISCV_SET6: | |
| 41 | + case R_RISCV_SUB6: | |
| 42 | + case R_RISCV_ADD16: | |
| 40 | 43 | case R_RISCV_ADD32: |
| 44 | + case R_RISCV_ADD64: | |
| 45 | + case R_RISCV_SUB16: | |
| 41 | 46 | case R_RISCV_SUB32: |
| 47 | + case R_RISCV_SUB64: | |
| 42 | 48 | case R_RISCV_32: |
| 43 | 49 | case R_RISCV_64: |
| 44 | 50 | return 0; |
| @@ -61,6 +67,10 @@ int gotplt_entry_type (int reloc_type) · 16 unmodified lines | ||
| 61 | 67 | case R_RISCV_RVC_BRANCH: |
| 62 | 68 | case R_RISCV_RVC_JUMP: |
| 63 | 69 | case R_RISCV_JUMP_SLOT: |
| 70 | + case R_RISCV_SET6: | |
| 71 | + case R_RISCV_SUB6: | |
| 72 | + case R_RISCV_ADD16: | |
| 73 | + case R_RISCV_SUB16: | |
| 64 | 74 | return NO_GOTPLT_ENTRY; |
| 65 | 75 | |
| 66 | 76 | case R_RISCV_BRANCH: |
| @@ -70,7 +80,9 @@ int gotplt_entry_type (int reloc_type) · 3 unmodified lines | ||
| 70 | 80 | case R_RISCV_PCREL_LO12_S: |
| 71 | 81 | case R_RISCV_32_PCREL: |
| 72 | 82 | case R_RISCV_ADD32: |
| 83 | + case R_RISCV_ADD64: | |
| 73 | 84 | case R_RISCV_SUB32: |
| 85 | + case R_RISCV_SUB64: | |
| 74 | 86 | case R_RISCV_32: |
| 75 | 87 | case R_RISCV_64: |
| 76 | 88 | case R_RISCV_JAL: |
| @@ -287,12 +299,30 @@ void relocate(TCCState *s1, ElfW_Rel *rel, int type, unsigned char *ptr, · 210 unmodified lines | ||
| 287 | 299 | case R_RISCV_64: |
| 288 | 300 | write64le(ptr, val); |
| 289 | 301 | return; |
| 302 | + case R_RISCV_ADD64: | |
| 303 | + write64le(ptr, read64le(ptr) + val); | |
| 304 | + return; | |
| 290 | 305 | case R_RISCV_ADD32: |
| 291 | 306 | write32le(ptr, read32le(ptr) + val); |
| 292 | 307 | return; |
| 308 | + case R_RISCV_SUB64: | |
| 309 | + write64le(ptr, read64le(ptr) - val); | |
| 310 | + return; | |
| 293 | 311 | case R_RISCV_SUB32: |
| 294 | 312 | write32le(ptr, read32le(ptr) - val); |
| 295 | 313 | return; |
| 314 | + case R_RISCV_ADD16: | |
| 315 | + write16le(ptr, read16le(ptr) + val); | |
| 316 | + return; | |
| 317 | + case R_RISCV_SUB16: | |
| 318 | + write16le(ptr, read16le(ptr) - val); | |
| 319 | + return; | |
| 320 | + case R_RISCV_SET6: | |
| 321 | + *ptr = (*ptr & ~0x3f) | (val & 0x3f); | |
| 322 | + return; | |
| 323 | + case R_RISCV_SUB6: | |
| 324 | + *ptr = (*ptr & ~0x3f) | ((*ptr - val) & 0x3f); | |
| 325 | + return; | |
| 296 | 326 | |
| 297 | 327 | case R_RISCV_32_PCREL: |
| 298 | 328 | case R_RISCV_COPY: |