From 776364f395d786c4c27e1f7a49cbba38951d9820 Mon Sep 17 00:00:00 2001 From: Thomas Preud'homme Date: Fri, 10 Sep 2010 21:09:07 +0200 Subject: Add support for __FreeBSD_kernel__ kernel Add support for kfreebsd-i386 and kfreebsd-amd64 Debian arch with thanks to Pierre Chifflier . --- tccelf.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'tccelf.c') diff --git a/tccelf.c b/tccelf.c index e5603eb..c93955b 100644 --- a/tccelf.c +++ b/tccelf.c @@ -1332,6 +1332,8 @@ ST_FUNC void tcc_add_linker_symbols(TCCState *s1) /* name of ELF interpreter */ #if defined __FreeBSD__ static const char elf_interp[] = "/libexec/ld-elf.so.1"; +#elif defined __FreeBSD_kernel__ +static char elf_interp[] = "/lib/ld.so.1"; #elif defined TCC_ARM_EABI static const char elf_interp[] = "/lib/ld-linux.so.3"; #elif defined(TCC_TARGET_X86_64) @@ -1368,7 +1370,7 @@ static void tcc_output_binary(TCCState *s1, FILE *f, } } -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #define HAVE_PHDR 1 #define EXTRA_RELITEMS 14 @@ -1851,7 +1853,7 @@ static int elf_output_file(TCCState *s1, const char *filename) } /* update dynamic relocation infos */ if (s->sh_type == SHT_RELX) { -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) if (!strcmp(strsec->data + s->sh_name, ".rel.got")) { // rel_size == 0) { rel_addr = addr; rel_size += s->sh_size; // XXX only first rel. @@ -1892,7 +1894,7 @@ static int elf_output_file(TCCState *s1, const char *filename) if (interp) { ph = &phdr[0]; -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) { int len = phnum * sizeof(ElfW(Phdr)); @@ -2007,7 +2009,7 @@ static int elf_output_file(TCCState *s1, const char *filename) put_dt(dynamic, DT_RELASZ, rel_size); put_dt(dynamic, DT_RELAENT, sizeof(ElfW_Rel)); #else -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) put_dt(dynamic, DT_PLTGOT, s1->got->sh_addr); put_dt(dynamic, DT_PLTRELSZ, rel_size); put_dt(dynamic, DT_JMPREL, rel_addr); @@ -2115,7 +2117,7 @@ static int elf_output_file(TCCState *s1, const char *filename) ehdr.e_ident[4] = TCC_ELFCLASS; ehdr.e_ident[5] = ELFDATA2LSB; ehdr.e_ident[6] = EV_CURRENT; -#ifdef __FreeBSD__ +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) ehdr.e_ident[EI_OSABI] = ELFOSABI_FREEBSD; #endif #ifdef TCC_TARGET_ARM @@ -2153,7 +2155,7 @@ static int elf_output_file(TCCState *s1, const char *filename) for(i=1;inb_sections;i++) { s = s1->sections[section_order[i]]; if (s->sh_type != SHT_NOBITS) { -#if defined(__FreeBSD__) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) if (s->sh_type == SHT_DYNSYM) patch_dynsym_undef(s1, s); #endif -- cgit v1.3.1