linux/export: fix reference to exported functions for parisc64
John David Anglin reported parisc has been broken since commitddb5cdbafa("kbuild: generate KSYMTAB entries by modpost"). Like ia64, parisc64 uses a function descriptor. The function references must be prefixed with P%. Also, symbols prefixed $$ from the library have the symbol type STT_LOPROC instead of STT_FUNC. They should be handled as functions too. Fixes:ddb5cdbafa("kbuild: generate KSYMTAB entries by modpost") Reported-by: John David Anglin <dave.anglin@bell.net> Tested-by: John David Anglin <dave.anglin@bell.net> Tested-by: Helge Deller <deller@gmx.de> Closes: https://lore.kernel.org/linux-parisc/1901598a-e11d-f7dd-a5d9-9a69d06e6b6e@bell.net/T/#u Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
		
				
					committed by
					
						 Helge Deller
						Helge Deller
					
				
			
			
				
	
			
			
			
						parent
						
							e5ef93d02d
						
					
				
				
					commit
					08700ec705
				
			| @@ -52,6 +52,8 @@ | ||||
| 
 | ||||
| #ifdef CONFIG_IA64 | ||||
| #define KSYM_FUNC(name)		@fptr(name) | ||||
| #elif defined(CONFIG_PARISC) && defined(CONFIG_64BIT) | ||||
| #define KSYM_FUNC(name)		P%name | ||||
| #else | ||||
| #define KSYM_FUNC(name)		name | ||||
| #endif | ||||
|   | ||||
| @@ -1226,6 +1226,15 @@ static void check_export_symbol(struct module *mod, struct elf_info *elf, | ||||
| 	 */ | ||||
| 	s->is_func = (ELF_ST_TYPE(sym->st_info) == STT_FUNC); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * For parisc64, symbols prefixed $$ from the library have the symbol type | ||||
| 	 * STT_LOPROC. They should be handled as functions too. | ||||
| 	 */ | ||||
| 	if (elf->hdr->e_ident[EI_CLASS] == ELFCLASS64 && | ||||
| 	    elf->hdr->e_machine == EM_PARISC && | ||||
| 	    ELF_ST_TYPE(sym->st_info) == STT_LOPROC) | ||||
| 		s->is_func = true; | ||||
| 
 | ||||
| 	if (match(secname, PATTERNS(INIT_SECTIONS))) | ||||
| 		warn("%s: %s: EXPORT_SYMBOL used for init symbol. Remove __init or EXPORT_SYMBOL.\n", | ||||
| 		     mod->name, name); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user