Recognize -Wl,-Bsymbolic
Without -Bsymbolic, a symbol/function in a *.so can be overridden by a symbol/function in the main module. That is the default search order, but not supported by tcc. With -Bsymbolic, the linker tries to resolve a symbol/function in the current module first. The loader in tcc implements this search order. We do not distinguish -Bsymbolic and -Bsymbolic-function -- By by ... Detlef
This commit is contained in:
		
							parent
							
								
									5caf6235cf
								
							
						
					
					
						commit
						2650584ac4
					
				
					 3 changed files with 9 additions and 0 deletions
				
			
		
							
								
								
									
										2
									
								
								tcc.c
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								tcc.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -386,6 +386,8 @@ static int parse_args(TCCState *s, int argc, char **argv)
 | 
			
		|||
                    if (strstart(optarg, "-Ttext,", &p)) {
 | 
			
		||||
                        s->text_addr = strtoul(p, NULL, 16);
 | 
			
		||||
                        s->has_text_addr = 1;
 | 
			
		||||
                    } else if (strstart(optarg, "-Bsymbolic", &p)) {
 | 
			
		||||
                        s->symbolic = TRUE;
 | 
			
		||||
                    } else if (strstart(optarg, "--section-alignment,", &p)) {
 | 
			
		||||
                        s->section_align = strtoul(p, NULL, 16);
 | 
			
		||||
                    } else if (strstart(optarg, "--image-base,", &p)) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3
									
								
								tcc.h
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								tcc.h
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -445,6 +445,9 @@ struct TCCState {
 | 
			
		|||
    /* if true, all symbols are exported */
 | 
			
		||||
    int rdynamic;
 | 
			
		||||
 | 
			
		||||
    /* if true, resolve symbols in the current module first (-Wl,Bsymbolic) */
 | 
			
		||||
    int symbolic;
 | 
			
		||||
 | 
			
		||||
    /* if true, only link in referenced objects from archive */
 | 
			
		||||
    int alacarte_link;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								tccelf.c
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								tccelf.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1575,6 +1575,10 @@ static int elf_output_file(TCCState *s1, const char *filename)
 | 
			
		|||
                    put_dt(dynamic, DT_SONAME, put_elf_str(dynstr, s1->soname));
 | 
			
		||||
                put_dt(dynamic, DT_TEXTREL, 0);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (s1->symbolic)
 | 
			
		||||
                put_dt(dynamic, DT_SYMBOLIC, 0);
 | 
			
		||||
 | 
			
		||||
            /* add necessary space for other entries */
 | 
			
		||||
            saved_dynamic_data_offset = dynamic->data_offset;
 | 
			
		||||
            dynamic->data_offset += sizeof(ElfW(Dyn)) * EXTRA_RELITEMS;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue