dlltest failed on a riscv machine.
Unified · Split
| @@ -39,10 +39,13 @@ int code_reloc (int reloc_type) · 38 unmodified lines | |||
| 39 | case R_RISCV_PCREL_LO12_S: | 39 | case R_RISCV_PCREL_LO12_S: |
| 40 | case R_RISCV_32_PCREL: | 40 | case R_RISCV_32_PCREL: |
| 41 | case R_RISCV_SET6: | 41 | case R_RISCV_SET6: |
| 42 | case R_RISCV_SET8: | ||
| 43 | case R_RISCV_SET16: | ||
| 42 | case R_RISCV_SUB6: | 44 | case R_RISCV_SUB6: |
| 43 | case R_RISCV_ADD16: | 45 | case R_RISCV_ADD16: |
| 44 | case R_RISCV_ADD32: | 46 | case R_RISCV_ADD32: |
| 45 | case R_RISCV_ADD64: | 47 | case R_RISCV_ADD64: |
| 48 | case R_RISCV_SUB8: | ||
| 46 | case R_RISCV_SUB16: | 49 | case R_RISCV_SUB16: |
| 47 | case R_RISCV_SUB32: | 50 | case R_RISCV_SUB32: |
| 48 | case R_RISCV_SUB64: | 51 | case R_RISCV_SUB64: |
| @@ -68,8 +71,11 @@ int gotplt_entry_type (int reloc_type) · 19 unmodified lines | |||
| 68 | case R_RISCV_RVC_JUMP: | 71 | case R_RISCV_RVC_JUMP: |
| 69 | case R_RISCV_JUMP_SLOT: | 72 | case R_RISCV_JUMP_SLOT: |
| 70 | case R_RISCV_SET6: | 73 | case R_RISCV_SET6: |
| 74 | case R_RISCV_SET8: | ||
| 75 | case R_RISCV_SET16: | ||
| 71 | case R_RISCV_SUB6: | 76 | case R_RISCV_SUB6: |
| 72 | case R_RISCV_ADD16: | 77 | case R_RISCV_ADD16: |
| 78 | case R_RISCV_SUB8: | ||
| 73 | case R_RISCV_SUB16: | 79 | case R_RISCV_SUB16: |
| 74 | return NO_GOTPLT_ENTRY; | 80 | return NO_GOTPLT_ENTRY; |
| 75 | 81 | ||
| @@ -328,12 +334,21 @@ void relocate(TCCState *s1, ElfW_Rel *rel, int type, unsigned char *ptr, · 252 unmodified lines | |||
| 328 | case R_RISCV_ADD16: | 334 | case R_RISCV_ADD16: |
| 329 | write16le(ptr, read16le(ptr) + val); | 335 | write16le(ptr, read16le(ptr) + val); |
| 330 | return; | 336 | return; |
| 337 | case R_RISCV_SUB8: | ||
| 338 | *ptr -= val; | ||
| 339 | return; | ||
| 331 | case R_RISCV_SUB16: | 340 | case R_RISCV_SUB16: |
| 332 | write16le(ptr, read16le(ptr) - val); | 341 | write16le(ptr, read16le(ptr) - val); |
| 333 | return; | 342 | return; |
| 334 | case R_RISCV_SET6: | 343 | case R_RISCV_SET6: |
| 335 | *ptr = (*ptr & ~0x3f) | (val & 0x3f); | 344 | *ptr = (*ptr & ~0x3f) | (val & 0x3f); |
| 336 | return; | 345 | return; |
| 346 | case R_RISCV_SET8: | ||
| 347 | *ptr = (*ptr & ~0xff) | (val & 0xff); | ||
| 348 | return; | ||
| 349 | case R_RISCV_SET16: | ||
| 350 | *ptr = (*ptr & ~0xffff) | (val & 0xffff); | ||
| 351 | return; | ||
| 337 | case R_RISCV_SUB6: | 352 | case R_RISCV_SUB6: |
| 338 | *ptr = (*ptr & ~0x3f) | ((*ptr - val) & 0x3f); | 353 | *ptr = (*ptr & ~0x3f) | ((*ptr - val) & 0x3f); |
| 339 | return; | 354 | return; |