Thread (25 messages) flat view 25 messages, 4 authors, 2015-03-30
STALE4179d

[PATCH] ARM: force linker to use PIC veneers

From: Nicolas Pitre <hidden>
Date: 2015-03-24 15:49:21

On Tue, 24 Mar 2015, Ard Biesheuvel wrote:
On 24 March 2015 at 16:16, Nicolas Pitre [off-list ref] wrote:
quoted
On Tue, 24 Mar 2015, Ard Biesheuvel wrote:
quoted
On 24 March 2015 at 13:22, Dave Martin [off-list ref] wrote:
quoted
How many such veneers get added in the your kernel configuration, and
how many are actually necessary (i.e., calls between MMU-off code and
elsewhere)?
Very few. In addition to the example (which will be addressed in
another way regardless) there are some resume functions that get
allocated in .data, and those would need it as well.

What are they? I thought we removed all instances of those already.
quoted
I have also proposed b_far/bl_far macros that could be used there as
well.
Could the automatic veneer insertion replace the unconditional
b_far/bl_far usage?  The former would be preferable to the later.
Agreed. I am not entirely sure why those functions don't get a veneer.
Perhaps simply because .data is not annotated as executable?

Frankly, I don't really understand the purpose of putting those in
.data in the first place. but if they need to remain there, I can try
to figure out how to get the linker to emit veneers for those as well.
I'm guilty of introducing the first instance of code in .data back in 
... hrm ... 1998 or so.  I wasn't as experienced in ARM assembly back 
then and the resume code needed to fetch its context data while the MMU 
was off. So the easy way was simply to put the code next to the data 
block and get its address using adr.

These days we know how to write code to obtain position independent 
memory addresses at run time. One such example is commit b4e6153704 
where the bl relocation also exceeded its range.  But I thought I had 
converted all those instances already.


Nicolas
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help