aboutsummaryrefslogtreecommitdiff
path: root/tccelf.c
diff options
context:
space:
mode:
authorgrischka <grischka>2016-10-05 18:34:17 +0200
committergrischka <grischka>2016-10-05 18:34:17 +0200
commitb42cb16b65ed237e6ec30f65d4f9647561515cb8 (patch)
tree4180321ae046754c683079c6e94764c3ab14e072 /tccelf.c
parentb691585785086024549cfb9ac65f3397263965aa (diff)
downloadtinycc-b42cb16b65ed237e6ec30f65d4f9647561515cb8.tar.gz
tinycc-b42cb16b65ed237e6ec30f65d4f9647561515cb8.tar.bz2
Misc. fixes
Makefile : - do not 'uninstall' peoples /usr/local/doc entirely libtcc.c : - MEM_DEBUG : IDE-friendly output "file:line: ..." - always ELF for objects tccgen.c : - fix memory leak in new switch code - move static 'in_sizeof' out of function profiling : - define 'static' to empty resolve_sym() : - replace by dlsym() win32/64: fix R_XXX_RELATIVE fixme - was fixed for i386 already in 8e4d64be2fc1d707c7800c5096f6e0ea22cbd - do not -Lsystemdir if compiling to .o
Diffstat (limited to 'tccelf.c')
-rw-r--r--tccelf.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/tccelf.c b/tccelf.c
index 23c7e9b..e6468b2 100644
--- a/tccelf.c
+++ b/tccelf.c
@@ -450,7 +450,7 @@ ST_FUNC void relocate_syms(TCCState *s1, int do_resolve)
#if defined TCC_IS_NATIVE && !defined _WIN32
void *addr;
name = (char *) symtab_section->link->data + sym->st_name;
- addr = resolve_sym(s1, name);
+ addr = dlsym(RTLD_DEFAULT, name);
if (addr) {
sym->st_value = (addr_t)addr;
#ifdef DEBUG_RELOC
@@ -576,15 +576,18 @@ ST_FUNC void relocate_section(TCCState *s1, Section *s)
goto output_file;
write16le(ptr, read16le(ptr) + val - addr);
break;
- case R_386_RELATIVE:
- /* do nothing */
+
+#ifdef TCC_TARGET_PE
+ case R_386_RELATIVE: /* handled in pe_relocate_rva() */
break;
+#endif
case R_386_COPY:
/* This reloction must copy initialized data from the library
to the program .bss segment. Currently made like for ARM
(to remove noise of defaukt case). Is this true?
*/
break;
+
default:
fprintf(stderr,"FIXME: handle reloc type %d at %x [%p] to %x\n",
type, (unsigned)addr, ptr, (unsigned)val);
@@ -773,6 +776,10 @@ ST_FUNC void relocate_section(TCCState *s1, Section *s)
/* Nothing to do. Normally used to indicate a dependency
on a certain symbol (like for exception handling under EABI). */
break;
+#ifdef TCC_TARGET_PE
+ case R_ARM_RELATIVE: /* handled in pe_relocate_rva() */
+ break;
+#endif
default:
fprintf(stderr,"FIXME: handle reloc type %x at %x [%p] to %x\n",
type, (unsigned)addr, ptr, (unsigned)val);
@@ -973,6 +980,11 @@ ST_FUNC void relocate_section(TCCState *s1, Section *s)
/* we load the got offset */
write32le(ptr, read32le(ptr) + s1->sym_attrs[sym_index].got_offset);
break;
+#ifdef TCC_TARGET_PE
+ case R_X86_64_RELATIVE: /* handled in pe_relocate_rva() */
+ break;
+#endif
+
#else
#error unsupported processor
#endif