mirror of
https://github.com/frida/tinycc
synced 2024-12-24 05:56:49 +03:00
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
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…
Reference in New Issue
Block a user