mirror of
https://github.com/mirror/tinycc.git
synced 2025-01-15 05:20:06 +08:00
added -nostdlib
This commit is contained in:
parent
7828683e60
commit
2b64f2f570
15
tcc.c
15
tcc.c
@ -392,9 +392,9 @@ 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;
|
||||||
|
18
tccelf.c
18
tccelf.c
@ -778,8 +778,10 @@ static void tcc_add_runtime(TCCState *s1)
|
|||||||
int i;
|
int i;
|
||||||
Section *s;
|
Section *s;
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "%s/%s", tcc_lib_path, "libtcc1.o");
|
if (!s1->nostdlib) {
|
||||||
tcc_add_file(s1, buf);
|
snprintf(buf, sizeof(buf), "%s/%s", tcc_lib_path, "libtcc1.o");
|
||||||
|
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,12 +1250,14 @@ 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;
|
||||||
put32(p + 2, get32(p + 2) + s1->got->sh_addr);
|
if (p < p_end) {
|
||||||
put32(p + 8, get32(p + 8) + s1->got->sh_addr);
|
|
||||||
p += 16;
|
|
||||||
while (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);
|
||||||
p += 16;
|
p += 16;
|
||||||
|
while (p < p_end) {
|
||||||
|
put32(p + 2, get32(p + 2) + s1->got->sh_addr);
|
||||||
|
p += 16;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user