Index: gcc/gcc/config/arm/aout.h |
diff --git a/gcc/gcc/config/arm/aout.h b/gcc/gcc/config/arm/aout.h |
index e9104220febbedb506f27c7632218452dcd1ec1b..5abad67dd69046875639c49f2398bcbe7cab82ff 100644 |
--- a/gcc/gcc/config/arm/aout.h |
+++ b/gcc/gcc/config/arm/aout.h |
@@ -243,7 +243,30 @@ |
if (TARGET_ARM) \ |
asm_fprintf (STREAM, "\tb\t%LL%d\n", VALUE); \ |
else if (TARGET_THUMB1) \ |
- asm_fprintf (STREAM, "\t.word\t%LL%d-%LL%d\n", VALUE, REL); \ |
+ { \ |
+ if (flag_pic || optimize_size) \ |
+ { \ |
+ switch (GET_MODE(body)) \ |
+ { \ |
+ case QImode: \ |
+ asm_fprintf (STREAM, "\t.byte\t(%LL%d-%LL%d)/2\n", \ |
+ VALUE, REL); \ |
+ break; \ |
+ case HImode: /* TBH */ \ |
+ asm_fprintf (STREAM, "\t.2byte\t(%LL%d-%LL%d)/2\n", \ |
+ VALUE, REL); \ |
+ break; \ |
+ case SImode: \ |
+ asm_fprintf (STREAM, "\t.word\t%LL%d-%LL%d\n", \ |
+ VALUE, REL); \ |
+ break; \ |
+ default: \ |
+ gcc_unreachable(); \ |
+ } \ |
+ } \ |
+ else \ |
+ asm_fprintf (STREAM, "\t.word\t%LL%d+1\n", VALUE); \ |
+ } \ |
else /* Thumb-2 */ \ |
{ \ |
switch (GET_MODE(body)) \ |