diff options
| author | Thomas Preud'homme <robotux@celest.fr> | 2016-11-12 23:16:09 +0800 |
|---|---|---|
| committer | Thomas Preud'homme <robotux@celest.fr> | 2016-12-03 17:26:51 +0000 |
| commit | c4bec037be0da6bfd19484c34cc19e358cbb6822 (patch) | |
| tree | be88d5d1b6b97ec3b57571831fad5b847b0b0163 | |
| parent | 25927df3b75c5ce2b64ab8acdcc5974b4e1c89c1 (diff) | |
| download | tinycc-c4bec037be0da6bfd19484c34cc19e358cbb6822.tar.gz tinycc-c4bec037be0da6bfd19484c34cc19e358cbb6822.tar.bz2 | |
Code simplification in relocate_syms
| -rw-r--r-- | tccelf.c | 11 |
1 files changed, 4 insertions, 7 deletions
@@ -665,11 +665,9 @@ ST_FUNC void relocate_syms(TCCState *s1, int do_resolve) /* Use ld.so to resolve symbol for us (for tcc -run) */ if (do_resolve) { #if defined TCC_IS_NATIVE && !defined TCC_TARGET_PE - void *addr; - name = (char *) symtab_section->link->data + sym->st_name; - addr = dlsym(RTLD_DEFAULT, name); + void *addr = dlsym(RTLD_DEFAULT, name); if (addr) { - sym->st_value = (addr_t)addr; + sym->st_value = (addr_t) addr; #ifdef DEBUG_RELOC printf ("relocate_sym: %s -> 0x%lx\n", name, sym->st_value); #endif @@ -686,11 +684,10 @@ ST_FUNC void relocate_syms(TCCState *s1, int do_resolve) /* only weak symbols are accepted to be undefined. Their value is zero */ sym_bind = ELFW(ST_BIND)(sym->st_info); - if (sym_bind == STB_WEAK) { + if (sym_bind == STB_WEAK) sym->st_value = 0; - } else { + else tcc_error_noabort("undefined symbol '%s'", name); - } } else if (sh_num < SHN_LORESERVE) { /* add section base */ sym->st_value += s1->sections[sym->st_shndx]->sh_addr; |
