Commit 17e74013 authored by David Mosberger's avatar David Mosberger

ia64: Make brl-branches to ia64_spinlock_contention work from modules.

	Since these branches use a special calling-convention, we don't
	want to go through the PLT stubs normally used for cross-module
	calls.  Also fix a 1-bit bug in the plt_reloc() function which
	got triggered now that the core code lives below the module
	code (due to the virtual mapping of the core).
parent 630128c3
......@@ -192,10 +192,18 @@ EXPORT_SYMBOL(unw_access_pr);
#ifdef CONFIG_SMP
# if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4)
extern void ia64_spinlock_contention_pre3_4 (void);
/*
* This is not a normal routine and we don't want a function descriptor for it, so we use
* a fake declaration here.
*/
extern char ia64_spinlock_contention_pre3_4;
EXPORT_SYMBOL(ia64_spinlock_contention_pre3_4);
# else
extern void ia64_spinlock_contention (void);
/*
* This is not a normal routine and we don't want a function descriptor for it, so we use
* a fake declaration here.
*/
extern char ia64_spinlock_contention;
EXPORT_SYMBOL(ia64_spinlock_contention);
# endif
#endif
......
......@@ -18,7 +18,8 @@
LTOFF22X
LTOFF22X
LTOFF_FPTR22
PCREL21B
PCREL21B (for br.call only; br.cond is not supported out of modules!)
PCREL60B (for brl.cond only; brl.call is not supported for modules!)
PCREL64LSB
SECREL32LSB
SEGREL64LSB
......@@ -254,7 +255,7 @@ plt_target (struct plt_entry *plt)
b0 = b[0]; b1 = b[1];
off = ( ((b1 & 0x00fffff000000000) >> 36) /* imm20b -> bit 0 */
| ((b0 >> 48) << 20) | ((b1 & 0x7fffff) << 36) /* imm39 -> bit 20 */
| ((b1 & 0x0800000000000000) << 1)); /* i -> bit 60 */
| ((b1 & 0x0800000000000000) << 0)); /* i -> bit 59 */
return (long) plt->bundle[1] + 16*off;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment