aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2014-04-04 23:33:04 +0200
committerMichael Matz <matz@suse.de>2014-04-04 23:33:04 +0200
commit0688afdd34c7c2a4696d22f68497a7a887e6cc37 (patch)
treef962a02c0c31f1a1d9aec12e1aff456ec4657afe
parent5879c854fb94f722a7ffdd4e895c9ce418548959 (diff)
downloadtinycc-0688afdd34c7c2a4696d22f68497a7a887e6cc37.tar.gz
tinycc-0688afdd34c7c2a4696d22f68497a7a887e6cc37.tar.bz2
arm: Handle R_ARM_NONE relocs
These relocations are used to express a dependency on a certain symbol (e.g. for EABIs exception handling to the __aeabi_unwind_cpp_pr{0,1,2} routines). Just ignore them in reloc processing.
-rw-r--r--tccelf.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/tccelf.c b/tccelf.c
index 568b40f..b55dbc9 100644
--- a/tccelf.c
+++ b/tccelf.c
@@ -769,6 +769,10 @@ ST_FUNC void relocate_section(TCCState *s1, Section *s)
if ((0x0ffffff0 & *(int*)ptr) == 0x012FFF10)
*(int*)ptr ^= 0xE12FFF10 ^ 0xE1A0F000; /* BX Rm -> MOV PC, Rm */
break;
+ case R_ARM_NONE:
+ /* Nothing to do. Normally used to indicate a dependency
+ on a certain symbol (like for exception handling under EABI). */
+ break;
default:
fprintf(stderr,"FIXME: handle reloc type %x at %x [%p] to %x\n",
type, (unsigned)addr, ptr, (unsigned)val);