forked from mirrors/linux
		
	kernel: add support for .init_array.* constructors
KASan uses constructors for initializing redzones for global variables. Globals instrumentation in GCC 4.9.2 produces constructors with priority (.init_array.00099) Currently kernel ignores such constructors. Only constructors with default priority supported (.init_array) This patch adds support for constructors with priorities. For kernel image we put pointers to constructors between __ctors_start/__ctors_end and do_ctors() will call them on start up. For modules we merge .init_array.* sections into resulting .init_array. Module code properly handles constructors in .init_array section. Signed-off-by: Andrey Ryabinin <a.ryabinin@samsung.com> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Konstantin Serebryany <kcc@google.com> Cc: Dmitry Chernenkov <dmitryc@google.com> Signed-off-by: Andrey Konovalov <adech.fo@gmail.com> Cc: Yuri Gribov <tetra2005@gmail.com> Cc: Konstantin Khlebnikov <koct9i@gmail.com> Cc: Sasha Levin <sasha.levin@oracle.com> Cc: Christoph Lameter <cl@linux.com> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: Dave Hansen <dave.hansen@intel.com> Cc: Andi Kleen <andi@firstfloor.org> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Christoph Lameter <cl@linux.com> Cc: Pekka Enberg <penberg@kernel.org> Cc: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									cb9e3c292d
								
							
						
					
					
						commit
						9ddf82521c
					
				
					 2 changed files with 4 additions and 0 deletions
				
			
		|  | @ -478,6 +478,7 @@ | |||
| #define KERNEL_CTORS()	. = ALIGN(8);			   \ | ||||
| 			VMLINUX_SYMBOL(__ctors_start) = .; \ | ||||
| 			*(.ctors)			   \ | ||||
| 			*(SORT(.init_array.*))		   \ | ||||
| 			*(.init_array)			   \ | ||||
| 			VMLINUX_SYMBOL(__ctors_end) = .; | ||||
| #else | ||||
|  |  | |||
|  | @ -16,4 +16,7 @@ SECTIONS { | |||
| 	__kcrctab_unused	0 : { *(SORT(___kcrctab_unused+*)) } | ||||
| 	__kcrctab_unused_gpl	0 : { *(SORT(___kcrctab_unused_gpl+*)) } | ||||
| 	__kcrctab_gpl_future	0 : { *(SORT(___kcrctab_gpl_future+*)) } | ||||
| 
 | ||||
| 	. = ALIGN(8); | ||||
| 	.init_array		0 : { *(SORT(.init_array.*)) *(.init_array) } | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Andrey Ryabinin
						Andrey Ryabinin