From b50d4e8c3f35eb03c92fb67e1abcb096b12fce51 Mon Sep 17 00:00:00 2001 From: turbocat Date: Tue, 11 Jan 2022 20:39:28 +0000 Subject: [PATCH] ktcc: - Added autolink libc.def and libtcc1; - Fixed find crt0.o with arg -B (MUST BE REVISED); git-svn-id: svn://kolibrios.org@9615 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/ktcc/trunk/source/libtcc.c | 17 +++++++++------- programs/develop/ktcc/trunk/source/tccelf.c | 21 ++++++++++---------- programs/develop/ktcc/trunk/source/tccmeos.c | 16 +++++---------- 3 files changed, 26 insertions(+), 28 deletions(-) diff --git a/programs/develop/ktcc/trunk/source/libtcc.c b/programs/develop/ktcc/trunk/source/libtcc.c index a3310d2397..73071b0499 100644 --- a/programs/develop/ktcc/trunk/source/libtcc.c +++ b/programs/develop/ktcc/trunk/source/libtcc.c @@ -113,7 +113,7 @@ static void tcc_set_lib_path_w32(TCCState *s) { char path[1024], *p; GetModuleFileNameA(tcc_module, path, sizeof path); -#ifdef TCC_TARGET_KX +#ifdef TCC_TARGET_KX kx_fix_root_directory(path, sizeof path); normalize_slashes(strlwr(path)); #else @@ -155,13 +155,13 @@ BOOL WINAPI DllMain (HINSTANCE hDll, DWORD dwReason, LPVOID lpReserved) #if defined TCC_TARGET_MEOS /* on Kolibri host, we suppose the lib and includes are at the location of 'tcc' /lib, /include */ static void tcc_set_lib_path_kos(TCCState *s) -{ +{ char** argv0 = (char**)0x20; // path in kolibri header - char path[1024], *p; + char path[1024], *p; strncpy(path, *argv0, sizeof path); -#ifdef TCC_TARGET_KX +#ifdef TCC_TARGET_KX kx_fix_root_directory(path, sizeof path); -#else +#else p = tcc_basename(path); if (p > path) p--; *p = 0; @@ -174,8 +174,8 @@ static void tcc_set_lib_path_linux(TCCState *s) { char buff[4096+1]; readlink("/proc/self/exe", buff, 4096); -#ifdef TCC_TARGET_KX - kx_fix_root_directory(buff, sizeof buff); +#ifdef TCC_TARGET_KX + kx_fix_root_directory(buff, sizeof buff); const char *path = buff; #else const char *path = dirname(buff); @@ -2279,6 +2279,9 @@ ST_FUNC int tcc_parse_args1(TCCState *s, int argc, char **argv) case TCC_OPTION_B: /* set tcc utilities path (mainly for tcc development) */ tcc_set_lib_path(s, optarg); +#ifdef TCC_TARGET_MEOS + tcc_split_path(s, (void ***)&s->crt_paths, &s->nb_crt_paths, CONFIG_TCC_CRTPREFIX); +#endif break; case TCC_OPTION_l: args_parser_add_file(s, r, TCC_FILETYPE_BINARY); diff --git a/programs/develop/ktcc/trunk/source/tccelf.c b/programs/develop/ktcc/trunk/source/tccelf.c index 48be7186b0..2c3bc0c5d5 100644 --- a/programs/develop/ktcc/trunk/source/tccelf.c +++ b/programs/develop/ktcc/trunk/source/tccelf.c @@ -18,6 +18,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include "libtcc.h" #include "tcc.h" /* Define this to get some debug output during relocation processing. */ @@ -1618,17 +1619,21 @@ ST_FUNC void tcc_add_bcheck(TCCState *s1) ST_FUNC void tcc_add_runtime(TCCState *s1) { tcc_add_pragma_libs(s1); - /* add libc */ if (!s1->nostdlib) { +#if !defined (TCC_TARGET_MEOS) tcc_add_library(s1, "c"); -#ifdef CONFIG_USE_LIBGCC + #ifdef CONFIG_USE_LIBGCC if (!s1->static_link) { tcc_add_file(s1, TCC_LIBGCC, TCC_FILETYPE_BINARY); } -#endif -#if !defined(TCC_TARGET_MEOS) + #endif tcc_add_support(s1, "libtcc1.a"); +#else + if (tcc_add_library_err(s1, "c") < 0 || + tcc_add_library_err(s1, "tcc1") < 0) { + exit(1); + } #endif } @@ -1636,17 +1641,13 @@ ST_FUNC void tcc_add_runtime(TCCState *s1) libtcc1.a must be loaded before for __bound_init to be defined and crtn.o must be loaded after to not finalize _init too early. */ tcc_add_bcheck(s1); - +#if !defined (TCC_TARGET_MEOS) if (!s1->nostdlib) { /* add crt end if not memory output */ if (s1->output_type != TCC_OUTPUT_MEMORY) -#if defined(TCC_TARGET_MEOS) -; -// tcc_add_crt(s1, "start.o"); -#else tcc_add_crt(s1, "crtn.o"); -#endif } +#endif } /* add various standard linker symbols (must be done after the diff --git a/programs/develop/ktcc/trunk/source/tccmeos.c b/programs/develop/ktcc/trunk/source/tccmeos.c index 8cd6e4ba78..9df6cce730 100644 --- a/programs/develop/ktcc/trunk/source/tccmeos.c +++ b/programs/develop/ktcc/trunk/source/tccmeos.c @@ -19,10 +19,6 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef TCC_TARGET_KX -int undef_sym_flag=0; -#endif - typedef struct { char magic[8]; int version; @@ -130,8 +126,6 @@ void build_reloc(me_info* me) int sym_index = find_elf_sym(me->s1->dynsymtab_section, sym_name); Elf32_Sym* dyn_sym; if (sym_index == 0) { -#else - undef_sym_flag=1; #endif tcc_error_noabort("undefined symbol '%s'", sym_name); continue; @@ -302,13 +296,9 @@ int tcc_output_me(TCCState* s1,const char *filename) #ifdef TCC_TARGET_KX kx_init(&me); #endif + tcc_add_runtime(s1); relocate_common_syms(); assign_addresses(&me); -#ifndef TCC_TARGET_KX - if(undef_sym_flag){ - tcc_error("Linker error!"); - } -#endif if (s1->do_debug) tcc_output_dbgme(filename, &me); @@ -317,6 +307,10 @@ int tcc_output_me(TCCState* s1,const char *filename) me.header.params= tcc_find_symbol_me(&me,"__argv"); // <-- me.header.argv= tcc_find_symbol_me(&me,"__path"); // <-- + if (!me.header.entry_point || !me.header.params || me.header.argv) { + exit(1); + } + if((f=fopen(filename,"wb"))==NULL){ tcc_error("could not create '%s': %s", filename, strerror(errno)); }