diff options
Diffstat (limited to 'modutils/modutils-24.c')
-rw-r--r-- | modutils/modutils-24.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/modutils/modutils-24.c b/modutils/modutils-24.c index a878e740c..4ede01fe8 100644 --- a/modutils/modutils-24.c +++ b/modutils/modutils-24.c | |||
@@ -865,19 +865,23 @@ arch_apply_relocation(struct obj_file *f, | |||
865 | break; | 865 | break; |
866 | case R_H8_PCREL16: | 866 | case R_H8_PCREL16: |
867 | v -= dot + 2; | 867 | v -= dot + 2; |
868 | if ((ElfW(Sword))v > 0x7fff || | 868 | if ((ElfW(Sword))v > 0x7fff |
869 | (ElfW(Sword))v < -(ElfW(Sword))0x8000) | 869 | || (ElfW(Sword))v < -(ElfW(Sword))0x8000 |
870 | ) { | ||
870 | ret = obj_reloc_overflow; | 871 | ret = obj_reloc_overflow; |
871 | else | 872 | } else { |
872 | *(unsigned short *)loc = v; | 873 | *(unsigned short *)loc = v; |
874 | } | ||
873 | break; | 875 | break; |
874 | case R_H8_PCREL8: | 876 | case R_H8_PCREL8: |
875 | v -= dot + 1; | 877 | v -= dot + 1; |
876 | if ((ElfW(Sword))v > 0x7f || | 878 | if ((ElfW(Sword))v > 0x7f |
877 | (ElfW(Sword))v < -(ElfW(Sword))0x80) | 879 | || (ElfW(Sword))v < -(ElfW(Sword))0x80 |
880 | ) { | ||
878 | ret = obj_reloc_overflow; | 881 | ret = obj_reloc_overflow; |
879 | else | 882 | } else { |
880 | *(unsigned char *)loc = v; | 883 | *(unsigned char *)loc = v; |
884 | } | ||
881 | break; | 885 | break; |
882 | 886 | ||
883 | #elif defined(__i386__) | 887 | #elif defined(__i386__) |