Unlike other functions __aeabi_read_tp function must preserve r1-r3. The
currently generated code clobbers r3. Fix this by loading ARM_TP_ADDRESS using inline assembly. Approved by: imp (mentor)
This commit is contained in:
parent
72c3f707a4
commit
fcb6e7147b
@ -1,5 +1,6 @@
|
||||
/*-
|
||||
* Copyright (c) 2012 Oleksandr Tymoshenko
|
||||
* Copyright (c) 2012 Andrew Turner
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -36,7 +37,9 @@ __FBSDID("$FreeBSD$");
|
||||
void *
|
||||
__aeabi_read_tp()
|
||||
{
|
||||
void **_tp = (void **)ARM_TP_ADDRESS;
|
||||
void *_tp;
|
||||
|
||||
return (*_tp);
|
||||
asm("ldr %0, [%1]\n" : "=r"(_tp) : "r"(ARM_TP_ADDRESS));
|
||||
|
||||
return _tp;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user