mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	Add declare_object_symbol_alias for assembly codes (BZ #28128)
There are 2 problems in: #define declare_symbol_alias(symbol, original, type, size) \ declare_symbol_alias_1 (symbol, original, type, size) #ifdef __ASSEMBLER__ # define declare_symbol_alias_1(symbol, original, type, size) \ strong_alias (original, symbol); \ .type C_SYMBOL_NAME (symbol), %##type; \ .size C_SYMBOL_NAME (symbol), size 1. .type and .size are substituted by arguments. 2. %##type is expanded to "% type" due to the GCC bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101613 But assembler doesn't support "% type". Workaround BZ #28128 by 1. Don't define declare_symbol_alias for assembly codes. 2. Define declare_object_symbol_alias for assembly codes. Reviewed-by: Fangrui Song <maskray@google.com>
This commit is contained in:
		
				
					committed by
					
						 Adhemerval Zanella
						Adhemerval Zanella
					
				
			
			
				
	
			
			
			
						parent
						
							9bcd12d223
						
					
				
				
					commit
					111254f3e1
				
			| @@ -324,14 +324,16 @@ for linking") | |||||||
|    This is only necessary when defining something in assembly, or playing |    This is only necessary when defining something in assembly, or playing | ||||||
|    funny alias games where the size should be other than what the compiler |    funny alias games where the size should be other than what the compiler | ||||||
|    thinks it is.  */ |    thinks it is.  */ | ||||||
| #define declare_symbol_alias(symbol, original, type, size) \ |  | ||||||
|   declare_symbol_alias_1 (symbol, original, type, size) |  | ||||||
| #ifdef __ASSEMBLER__ | #ifdef __ASSEMBLER__ | ||||||
| # define declare_symbol_alias_1(symbol, original, type, size) \ | # define declare_object_symbol_alias(symbol, original, size) \ | ||||||
|    strong_alias (original, symbol); \ |   declare_object_symbol_alias_1 (symbol, original, size) | ||||||
|    .type C_SYMBOL_NAME (symbol), %##type; \ | # define declare_object_symbol_alias_1(symbol, original, s_size) \ | ||||||
|    .size C_SYMBOL_NAME (symbol), size |    strong_alias (original, symbol) ASM_LINE_SEP \ | ||||||
|  |    .type C_SYMBOL_NAME (symbol), %object ASM_LINE_SEP \ | ||||||
|  |    .size C_SYMBOL_NAME (symbol), s_size ASM_LINE_SEP | ||||||
| #else /* Not __ASSEMBLER__.  */ | #else /* Not __ASSEMBLER__.  */ | ||||||
|  | # define declare_symbol_alias(symbol, original, type, size) \ | ||||||
|  |   declare_symbol_alias_1 (symbol, original, type, size) | ||||||
| # define declare_symbol_alias_1(symbol, original, type, size) \ | # define declare_symbol_alias_1(symbol, original, type, size) \ | ||||||
|    asm (".globl " __SYMBOL_PREFIX #symbol \ |    asm (".globl " __SYMBOL_PREFIX #symbol \ | ||||||
| 	"\n\t" declare_symbol_alias_1_alias (symbol, original) \ | 	"\n\t" declare_symbol_alias_1_alias (symbol, original) \ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user