added -nostdlib

This commit is contained in:
bellard 2003-04-27 11:45:01 +00:00
parent 7828683e60
commit 2b64f2f570
2 changed files with 21 additions and 12 deletions

13
tcc.c
View File

@ -392,8 +392,8 @@ struct TCCState {
/* exported dynamic symbol section */ /* exported dynamic symbol section */
Section *dynsym; Section *dynsym;
/* if true, no standard headers are added */ int nostdinc; /* if true, no standard headers are added */
int nostdinc; int nostdlib; /* if true, no standard libraries are added */
/* if true, static linking is performed */ /* if true, static linking is performed */
int static_link; int static_link;
@ -9478,8 +9478,8 @@ int tcc_set_output_type(TCCState *s, int output_type)
} }
/* add libc crt1/crti objects */ /* add libc crt1/crti objects */
if (output_type == TCC_OUTPUT_EXE || if ((output_type == TCC_OUTPUT_EXE || output_type == TCC_OUTPUT_DLL) &&
output_type == TCC_OUTPUT_DLL) { !s->nostdlib) {
if (output_type != TCC_OUTPUT_DLL) if (output_type != TCC_OUTPUT_DLL)
tcc_add_file(s, CONFIG_TCC_CRT_PREFIX "/crt1.o"); tcc_add_file(s, CONFIG_TCC_CRT_PREFIX "/crt1.o");
tcc_add_file(s, CONFIG_TCC_CRT_PREFIX "/crti.o"); tcc_add_file(s, CONFIG_TCC_CRT_PREFIX "/crti.o");
@ -9620,6 +9620,7 @@ enum {
TCC_OPTION_m, TCC_OPTION_m,
TCC_OPTION_f, TCC_OPTION_f,
TCC_OPTION_nostdinc, TCC_OPTION_nostdinc,
TCC_OPTION_nostdlib,
TCC_OPTION_print_search_dirs, TCC_OPTION_print_search_dirs,
TCC_OPTION_rdynamic, TCC_OPTION_rdynamic,
TCC_OPTION_run, TCC_OPTION_run,
@ -9653,6 +9654,7 @@ static const TCCOption tcc_options[] = {
{ "m", TCC_OPTION_m, TCC_OPTION_HAS_ARG }, { "m", TCC_OPTION_m, TCC_OPTION_HAS_ARG },
{ "f", TCC_OPTION_f, TCC_OPTION_HAS_ARG | TCC_OPTION_NOSEP }, { "f", TCC_OPTION_f, TCC_OPTION_HAS_ARG | TCC_OPTION_NOSEP },
{ "nostdinc", TCC_OPTION_nostdinc, 0 }, { "nostdinc", TCC_OPTION_nostdinc, 0 },
{ "nostdlib", TCC_OPTION_nostdlib, 0 },
{ "print-search-dirs", TCC_OPTION_print_search_dirs, 0 }, { "print-search-dirs", TCC_OPTION_print_search_dirs, 0 },
{ "v", TCC_OPTION_v, 0 }, { "v", TCC_OPTION_v, 0 },
{ NULL }, { NULL },
@ -9804,6 +9806,9 @@ int main(int argc, char **argv)
case TCC_OPTION_nostdinc: case TCC_OPTION_nostdinc:
s->nostdinc = 1; s->nostdinc = 1;
break; break;
case TCC_OPTION_nostdlib:
s->nostdlib = 1;
break;
case TCC_OPTION_print_search_dirs: case TCC_OPTION_print_search_dirs:
print_search_dirs = 1; print_search_dirs = 1;
break; break;

View File

@ -778,8 +778,10 @@ static void tcc_add_runtime(TCCState *s1)
int i; int i;
Section *s; Section *s;
if (!s1->nostdlib) {
snprintf(buf, sizeof(buf), "%s/%s", tcc_lib_path, "libtcc1.o"); snprintf(buf, sizeof(buf), "%s/%s", tcc_lib_path, "libtcc1.o");
tcc_add_file(s1, buf); tcc_add_file(s1, buf);
}
#ifdef CONFIG_TCC_BCHECK #ifdef CONFIG_TCC_BCHECK
if (do_bounds_check) { if (do_bounds_check) {
unsigned long *ptr; unsigned long *ptr;
@ -811,7 +813,7 @@ static void tcc_add_runtime(TCCState *s1)
} }
#endif #endif
/* add libc if not memory output */ /* add libc if not memory output */
if (s1->output_type != TCC_OUTPUT_MEMORY) { if (s1->output_type != TCC_OUTPUT_MEMORY && !s1->nostdlib) {
tcc_add_library(s1, "c"); tcc_add_library(s1, "c");
tcc_add_file(s1, CONFIG_TCC_CRT_PREFIX "/crtn.o"); tcc_add_file(s1, CONFIG_TCC_CRT_PREFIX "/crtn.o");
} }
@ -1248,6 +1250,7 @@ int tcc_output_file(TCCState *s1, const char *filename)
p = s1->plt->data; p = s1->plt->data;
p_end = p + s1->plt->data_offset; p_end = p + s1->plt->data_offset;
if (p < p_end) {
put32(p + 2, get32(p + 2) + s1->got->sh_addr); put32(p + 2, get32(p + 2) + s1->got->sh_addr);
put32(p + 8, get32(p + 8) + s1->got->sh_addr); put32(p + 8, get32(p + 8) + s1->got->sh_addr);
p += 16; p += 16;
@ -1256,6 +1259,7 @@ int tcc_output_file(TCCState *s1, const char *filename)
p += 16; p += 16;
} }
} }
}
/* relocate symbols in .dynsym */ /* relocate symbols in .dynsym */
sym_end = (Elf32_Sym *)(s1->dynsym->data + s1->dynsym->data_offset); sym_end = (Elf32_Sym *)(s1->dynsym->data + s1->dynsym->data_offset);