forked from mirrors/linux
		
	ARM: 7324/1: modpost: Fix section warnings for ARM for many compilers
It turns out that many compilers don't show section warnings on ARM
currently because handling for ARM_CALL relocs are missing from
modpost.c.
Based on commit c2e26114 ([ARM] 3205/1: Handle new EABI relocations when
loading kernel modules) it seems that R_ARM_PC24, R_ARM_CALL and
R_ARM_JUMP24 can be handled the same way.
Note that at least Debian libc6-dev is missing defines for both
R_ARM_CALL and R_ARM_JUMP24 in /usr/include/elf.h. So for now
we need to define them in modpost.c if not defined.
Acked-by: Rusty Russell <rusty@rustcorp.com.au>
Cc: Ben Hutchings <ben@decadent.org.uk>
Cc: Anders Kaseorg <andersk@ksplice.com>
Cc: Greg KH <gregkh@linuxfoundation.org>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
			
			
This commit is contained in:
		
							parent
							
								
									08a183f02b
								
							
						
					
					
						commit
						6e2e340b59
					
				
					 1 changed files with 9 additions and 0 deletions
				
			
		| 
						 | 
					@ -1494,6 +1494,13 @@ static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef R_ARM_CALL
 | 
				
			||||||
 | 
					#define R_ARM_CALL	28
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef R_ARM_JUMP24
 | 
				
			||||||
 | 
					#define R_ARM_JUMP24	29
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
 | 
					static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned int r_typ = ELF_R_TYPE(r->r_info);
 | 
						unsigned int r_typ = ELF_R_TYPE(r->r_info);
 | 
				
			||||||
| 
						 | 
					@ -1505,6 +1512,8 @@ static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
 | 
				
			||||||
		              (elf->symtab_start + ELF_R_SYM(r->r_info));
 | 
							              (elf->symtab_start + ELF_R_SYM(r->r_info));
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case R_ARM_PC24:
 | 
						case R_ARM_PC24:
 | 
				
			||||||
 | 
						case R_ARM_CALL:
 | 
				
			||||||
 | 
						case R_ARM_JUMP24:
 | 
				
			||||||
		/* From ARM ABI: ((S + A) | T) - P */
 | 
							/* From ARM ABI: ((S + A) | T) - P */
 | 
				
			||||||
		r->r_addend = (int)(long)(elf->hdr +
 | 
							r->r_addend = (int)(long)(elf->hdr +
 | 
				
			||||||
		              sechdr->sh_offset +
 | 
							              sechdr->sh_offset +
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue