History

fixes for previous commit

grischka committed 6 years ago

Commit 2b7cffa1 parent ef422955 files · +45 −40Browse files

Unified · Split

5 files
  1. tcc.h +3 −0
  2. tccelf.c +5 −5
  3. tccrun.c +7 −5
  4. tests/tests2/112_backtrace.expect +29 −29
  5. tests/tests2/Makefile +1 −1
tcc.h+3−0
@@ -150,9 +150,12 @@ extern long double strtold (const char *__nptr, char **__endptr); · 149 unmodified lines
150# elif defined __arm__150# elif defined __arm__
151# define TCC_TARGET_ARM151# define TCC_TARGET_ARM
152# define TCC_ARM_EABI152# define TCC_ARM_EABI
153# define TCC_ARM_VFP
153# define TCC_ARM_HARDFLOAT154# define TCC_ARM_HARDFLOAT
154# elif defined __aarch64__155# elif defined __aarch64__
155# define TCC_TARGET_ARM64156# define TCC_TARGET_ARM64
157# elif defined __riscv
158# define TCC_TARGET_RISCV64
156# else159# else
157# define TCC_TARGET_I386160# define TCC_TARGET_I386
158# endif161# endif
tccelf.c+5−5
@@ -1359,7 +1359,7 @@ static void set_local_sym(TCCState *s1, const char *name, Section *s, int offset · 1358 unmodified lines
1359ST_FUNC void tcc_add_btstub(TCCState *s1)1359ST_FUNC void tcc_add_btstub(TCCState *s1)
1360{1360{
1361 Section *s;1361 Section *s;
1362 int n, o, b;1362 int n, o;
1363 CString cstr;1363 CString cstr;
1364 1364
1365 s = data_section;1365 s = data_section;
@@ -1372,11 +1372,11 @@ ST_FUNC void tcc_add_btstub(TCCState *s1) · 6 unmodified lines
1372 /* prog_base */1372 /* prog_base */
1373 put_elf_reloc(s1->symtab, s, s->data_offset, R_DATA_PTR, 0);1373 put_elf_reloc(s1->symtab, s, s->data_offset, R_DATA_PTR, 0);
1374 section_ptr_add(s, PTR_SIZE);1374 section_ptr_add(s, PTR_SIZE);
1375 n = 2 * PTR_SIZE, b = 0;1375 n = 2 * PTR_SIZE;
1376#ifdef CONFIG_TCC_BCHECK1376#ifdef CONFIG_TCC_BCHECK
1377 if (s1->do_bounds_check) {1377 if (s1->do_bounds_check) {
1378 put_ptr(s1, bounds_section, 0);1378 put_ptr(s1, bounds_section, 0);
1379 n -= PTR_SIZE, b = 1;1379 n -= PTR_SIZE;
1380 }1380 }
1381#endif1381#endif
1382 section_ptr_add(s, n);1382 section_ptr_add(s, n);
@@ -1386,8 +1386,8 @@ ST_FUNC void tcc_add_btstub(TCCState *s1) · 3 unmodified lines
1386 " extern void __bt_init(),*__rt_info[],__bt_init_dll();"1386 " extern void __bt_init(),*__rt_info[],__bt_init_dll();"
1387 "__attribute__((constructor)) static void __bt_init_rt(){");1387 "__attribute__((constructor)) static void __bt_init_rt(){");
1388#ifdef TCC_TARGET_PE1388#ifdef TCC_TARGET_PE
1389 if (s1->output_type == TCC_OUTPUT_DLL)1389 if (s1->output_type == TCC_OUTPUT_DLL)
1390 cstr_printf(&cstr, "__bt_init_dll(%d);", b);1390 cstr_printf(&cstr, "__bt_init_dll(%d);", s1->do_bounds_check);
1391#endif1391#endif
1392 cstr_printf(&cstr, "__bt_init(__rt_info,%d);}",1392 cstr_printf(&cstr, "__bt_init(__rt_info,%d);}",
1393 s1->output_type == TCC_OUTPUT_DLL ? 0 : s1->rt_num_callers + 1);1393 s1->output_type == TCC_OUTPUT_DLL ? 0 : s1->rt_num_callers + 1);
tccrun.c+7−5
@@ -161,6 +161,9 @@ LIBTCCAPI int tcc_run(TCCState *s1, int argc, char **argv) · 160 unmodified lines
161 rc->esym_start = (ElfW(Sym) *)(symtab_section->data);161 rc->esym_start = (ElfW(Sym) *)(symtab_section->data);
162 rc->esym_end = (ElfW(Sym) *)(symtab_section->data + symtab_section->data_offset);162 rc->esym_end = (ElfW(Sym) *)(symtab_section->data + symtab_section->data_offset);
163 rc->elf_str = (char *)symtab_section->link->data;163 rc->elf_str = (char *)symtab_section->link->data;
164#if PTR_SIZE == 8
165 rc->prog_base = text_section->sh_addr & 0xffffffff00000000ULL;
166#endif
164 rc->top_func = tcc_get_symbol(s1, "main");167 rc->top_func = tcc_get_symbol(s1, "main");
165 rc->num_callers = s1->rt_num_callers;168 rc->num_callers = s1->rt_num_callers;
166 rc->do_jmp = 1;169 rc->do_jmp = 1;
@@ -405,11 +408,10 @@ next: · 238 unmodified lines
405 if (sym->n_strx == 0) /* end of function */408 if (sym->n_strx == 0) /* end of function */
406 goto rel_pc;409 goto rel_pc;
407 abs_pc:410 abs_pc:
408 if (sizeof sym->n_value < PTR_SIZE) {411#if PTR_SIZE == 8
409 /* Stab_Sym.n_value is only 32bits */412 /* Stab_Sym.n_value is only 32bits */
410 //fprintf(stderr, "pc = %p %p %p\n", pc, rc->prog_base, wanted_pc), fflush(stderr);413 pc += rc->prog_base;
411 pc += rc->prog_base;414#endif
412 }
413 break;415 break;
414 rel_pc:416 rel_pc:
415 pc += func_addr;417 pc += func_addr;
tests/tests2/112_backtrace.expect+29−29
@@ -14,7 +14,7 @@ · 13 unmodified lines
14* f1()14* f1()
15112_backtrace.c:38: at f1: BCHECK: ........ is outside of the region15112_backtrace.c:38: at f1: BCHECK: ........ is outside of the region
16112_backtrace.c:43: by main16112_backtrace.c:43: by main
17112_backtrace.c:38: at f1: BCHECK: invalid pointer ........, size 0x14 in memmove dest17112_backtrace.c:38: at f1: BCHECK: invalid pointer ........, size 0x? in memmove dest
18112_backtrace.c:43: by main18112_backtrace.c:43: by main
19[returns 255]19[returns 255]
20 20
@@ -33,132 +33,132 @@ · 12 unmodified lines
33 33
34[test_bcheck_100]34[test_bcheck_100]
35112_backtrace.c:107: at main: BCHECK: ........ is outside of the region35112_backtrace.c:107: at main: BCHECK: ........ is outside of the region
36112_backtrace.c:107: at main: BCHECK: invalid pointer ........, size 0xa in memcpy dest36112_backtrace.c:107: at main: BCHECK: invalid pointer ........, size 0x? in memcpy dest
37[returns 255]37[returns 255]
38 38
39[test_bcheck_101]39[test_bcheck_101]
40112_backtrace.c:109: at main: BCHECK: ........ is outside of the region40112_backtrace.c:109: at main: BCHECK: ........ is outside of the region
41112_backtrace.c:109: at main: BCHECK: invalid pointer ........, size 0xa in memcpy src41112_backtrace.c:109: at main: BCHECK: invalid pointer ........, size 0x? in memcpy src
42[returns 255]42[returns 255]
43 43
44[test_bcheck_102]44[test_bcheck_102]
45112_backtrace.c:111: at main: BCHECK: overlapping regions ........(0x4), ........(0x4) in memcpy45112_backtrace.c:111: at main: BCHECK: overlapping regions ........(0x?), ........(0x?) in memcpy
46[returns 255]46[returns 255]
47 47
48[test_bcheck_103]48[test_bcheck_103]
49112_backtrace.c:113: at main: BCHECK: overlapping regions ........(0x4), ........(0x4) in memcpy49112_backtrace.c:113: at main: BCHECK: overlapping regions ........(0x?), ........(0x?) in memcpy
50[returns 255]50[returns 255]
51 51
52[test_bcheck_104]52[test_bcheck_104]
53112_backtrace.c:115: at main: BCHECK: ........ is outside of the region53112_backtrace.c:115: at main: BCHECK: ........ is outside of the region
54112_backtrace.c:115: at main: BCHECK: invalid pointer ........, size 0xa in memcmp s154112_backtrace.c:115: at main: BCHECK: invalid pointer ........, size 0x? in memcmp s1
55[returns 255]55[returns 255]
56 56
57[test_bcheck_105]57[test_bcheck_105]
58112_backtrace.c:117: at main: BCHECK: ........ is outside of the region58112_backtrace.c:117: at main: BCHECK: ........ is outside of the region
59112_backtrace.c:117: at main: BCHECK: invalid pointer ........, size 0xa in memcmp s259112_backtrace.c:117: at main: BCHECK: invalid pointer ........, size 0x? in memcmp s2
60[returns 255]60[returns 255]
61 61
62[test_bcheck_106]62[test_bcheck_106]
63112_backtrace.c:119: at main: BCHECK: ........ is outside of the region63112_backtrace.c:119: at main: BCHECK: ........ is outside of the region
64112_backtrace.c:119: at main: BCHECK: invalid pointer ........, size 0xa in memmove dest64112_backtrace.c:119: at main: BCHECK: invalid pointer ........, size 0x? in memmove dest
65[returns 255]65[returns 255]
66 66
67[test_bcheck_107]67[test_bcheck_107]
68112_backtrace.c:121: at main: BCHECK: ........ is outside of the region68112_backtrace.c:121: at main: BCHECK: ........ is outside of the region
69112_backtrace.c:121: at main: BCHECK: invalid pointer ........, size 0xa in memmove src69112_backtrace.c:121: at main: BCHECK: invalid pointer ........, size 0x? in memmove src
70[returns 255]70[returns 255]
71 71
72[test_bcheck_108]72[test_bcheck_108]
73112_backtrace.c:123: at main: BCHECK: ........ is outside of the region73112_backtrace.c:123: at main: BCHECK: ........ is outside of the region
74112_backtrace.c:123: at main: BCHECK: invalid pointer ........, size 0xa in memset74112_backtrace.c:123: at main: BCHECK: invalid pointer ........, size 0x? in memset
75[returns 255]75[returns 255]
76 76
77[test_bcheck_109]77[test_bcheck_109]
78112_backtrace.c:125: at main: BCHECK: ........ is outside of the region78112_backtrace.c:125: at main: BCHECK: ........ is outside of the region
79112_backtrace.c:125: at main: BCHECK: invalid pointer ........, size 0xb in strlen79112_backtrace.c:125: at main: BCHECK: invalid pointer ........, size 0x? in strlen
80[returns 255]80[returns 255]
81 81
82[test_bcheck_110]82[test_bcheck_110]
83112_backtrace.c:127: at main: BCHECK: ........ is outside of the region83112_backtrace.c:127: at main: BCHECK: ........ is outside of the region
84112_backtrace.c:127: at main: BCHECK: invalid pointer ........, size 0x4 in strcpy dest84112_backtrace.c:127: at main: BCHECK: invalid pointer ........, size 0x? in strcpy dest
85[returns 255]85[returns 255]
86 86
87[test_bcheck_111]87[test_bcheck_111]
88112_backtrace.c:129: at main: BCHECK: ........ is outside of the region88112_backtrace.c:129: at main: BCHECK: ........ is outside of the region
89112_backtrace.c:129: at main: BCHECK: invalid pointer ........, size 0x4 in strcpy src89112_backtrace.c:129: at main: BCHECK: invalid pointer ........, size 0x? in strcpy src
90[returns 255]90[returns 255]
91 91
92[test_bcheck_112]92[test_bcheck_112]
93112_backtrace.c:131: at main: BCHECK: overlapping regions ........(0x3), ........(0x3) in strcpy93112_backtrace.c:131: at main: BCHECK: overlapping regions ........(0x?), ........(0x?) in strcpy
94[returns 255]94[returns 255]
95 95
96[test_bcheck_113]96[test_bcheck_113]
97112_backtrace.c:133: at main: BCHECK: overlapping regions ........(0x4), ........(0x4) in strcpy97112_backtrace.c:133: at main: BCHECK: overlapping regions ........(0x?), ........(0x?) in strcpy
98[returns 255]98[returns 255]
99 99
100[test_bcheck_114]100[test_bcheck_114]
101112_backtrace.c:135: at main: BCHECK: ........ is outside of the region101112_backtrace.c:135: at main: BCHECK: ........ is outside of the region
102112_backtrace.c:135: at main: BCHECK: invalid pointer ........, size 0x4 in strncpy dest102112_backtrace.c:135: at main: BCHECK: invalid pointer ........, size 0x? in strncpy dest
103[returns 255]103[returns 255]
104 104
105[test_bcheck_115]105[test_bcheck_115]
106112_backtrace.c:137: at main: BCHECK: ........ is outside of the region106112_backtrace.c:137: at main: BCHECK: ........ is outside of the region
107112_backtrace.c:137: at main: BCHECK: invalid pointer ........, size 0x4 in strncpy src107112_backtrace.c:137: at main: BCHECK: invalid pointer ........, size 0x? in strncpy src
108[returns 255]108[returns 255]
109 109
110[test_bcheck_116]110[test_bcheck_116]
111112_backtrace.c:139: at main: BCHECK: overlapping regions ........(0x3), ........(0x3) in strncpy111112_backtrace.c:139: at main: BCHECK: overlapping regions ........(0x?), ........(0x?) in strncpy
112[returns 255]112[returns 255]
113 113
114[test_bcheck_117]114[test_bcheck_117]
115112_backtrace.c:141: at main: BCHECK: overlapping regions ........(0x4), ........(0x4) in strncpy115112_backtrace.c:141: at main: BCHECK: overlapping regions ........(0x?), ........(0x?) in strncpy
116[returns 255]116[returns 255]
117 117
118[test_bcheck_118]118[test_bcheck_118]
119112_backtrace.c:143: at main: BCHECK: ........ is outside of the region119112_backtrace.c:143: at main: BCHECK: ........ is outside of the region
120112_backtrace.c:143: at main: BCHECK: invalid pointer ........, size 0x9 in strcmp s1120112_backtrace.c:143: at main: BCHECK: invalid pointer ........, size 0x? in strcmp s1
121[returns 255]121[returns 255]
122 122
123[test_bcheck_119]123[test_bcheck_119]
124112_backtrace.c:145: at main: BCHECK: ........ is outside of the region124112_backtrace.c:145: at main: BCHECK: ........ is outside of the region
125112_backtrace.c:145: at main: BCHECK: invalid pointer ........, size 0x9 in strcmp s2125112_backtrace.c:145: at main: BCHECK: invalid pointer ........, size 0x? in strcmp s2
126[returns 255]126[returns 255]
127 127
128[test_bcheck_120]128[test_bcheck_120]
129112_backtrace.c:147: at main: BCHECK: ........ is outside of the region129112_backtrace.c:147: at main: BCHECK: ........ is outside of the region
130112_backtrace.c:147: at main: BCHECK: invalid pointer ........, size 0x6 in strncmp s1130112_backtrace.c:147: at main: BCHECK: invalid pointer ........, size 0x? in strncmp s1
131[returns 255]131[returns 255]
132 132
133[test_bcheck_121]133[test_bcheck_121]
134112_backtrace.c:149: at main: BCHECK: ........ is outside of the region134112_backtrace.c:149: at main: BCHECK: ........ is outside of the region
135112_backtrace.c:149: at main: BCHECK: invalid pointer ........, size 0x6 in strncmp s2135112_backtrace.c:149: at main: BCHECK: invalid pointer ........, size 0x? in strncmp s2
136[returns 255]136[returns 255]
137 137
138[test_bcheck_122]138[test_bcheck_122]
139112_backtrace.c:151: at main: BCHECK: ........ is outside of the region139112_backtrace.c:151: at main: BCHECK: ........ is outside of the region
140112_backtrace.c:151: at main: BCHECK: invalid pointer ........, size 0x6 in strcat dest140112_backtrace.c:151: at main: BCHECK: invalid pointer ........, size 0x? in strcat dest
141[returns 255]141[returns 255]
142 142
143[test_bcheck_123]143[test_bcheck_123]
144112_backtrace.c:153: at main: BCHECK: ........ is outside of the region144112_backtrace.c:153: at main: BCHECK: ........ is outside of the region
145112_backtrace.c:153: at main: BCHECK: invalid pointer ........, size 0x6 in strcat src145112_backtrace.c:153: at main: BCHECK: invalid pointer ........, size 0x? in strcat src
146[returns 255]146[returns 255]
147 147
148[test_bcheck_124]148[test_bcheck_124]
149112_backtrace.c:155: at main: BCHECK: overlapping regions ........(0x9), ........(0x6) in strcat149112_backtrace.c:155: at main: BCHECK: overlapping regions ........(0x?), ........(0x?) in strcat
150[returns 255]150[returns 255]
151 151
152[test_bcheck_125]152[test_bcheck_125]
153112_backtrace.c:157: at main: BCHECK: overlapping regions ........(0x4), ........(0x4) in strcat153112_backtrace.c:157: at main: BCHECK: overlapping regions ........(0x?), ........(0x?) in strcat
154[returns 255]154[returns 255]
155 155
156[test_bcheck_126]156[test_bcheck_126]
157112_backtrace.c:159: at main: BCHECK: ........ is outside of the region157112_backtrace.c:159: at main: BCHECK: ........ is outside of the region
158112_backtrace.c:159: at main: BCHECK: invalid pointer ........, size 0xb in strchr158112_backtrace.c:159: at main: BCHECK: invalid pointer ........, size 0x? in strchr
159[returns 255]159[returns 255]
160 160
161[test_bcheck_127]161[test_bcheck_127]
162112_backtrace.c:161: at main: BCHECK: ........ is outside of the region162112_backtrace.c:161: at main: BCHECK: ........ is outside of the region
163112_backtrace.c:161: at main: BCHECK: invalid pointer ........, size 0xb in strdup163112_backtrace.c:161: at main: BCHECK: invalid pointer ........, size 0x? in strdup
164[returns 255]164[returns 255]
tests/tests2/Makefile+1−1
@@ -72,7 +72,7 @@ GEN-ALWAYS = · 71 unmodified lines
72108_constructor.test: NORUN = true72108_constructor.test: NORUN = true
73 73
74112_backtrace.test: FLAGS += -dt -b74112_backtrace.test: FLAGS += -dt -b
75112_backtrace.test: FILTER += -e 's;[0-9A-Fa-fx]\{8,\};........;g'75112_backtrace.test: FILTER += -e 's;[0-9A-Fa-fx]\{8,\};........;g' -e 's;0x[0-9A-Fa-f]\+;0x?;g'
76 76
77# Filter source directory in warnings/errors (out-of-tree builds)77# Filter source directory in warnings/errors (out-of-tree builds)
78FILTER = 2>&1 | sed -e 's,$(SRC)/,,g'78FILTER = 2>&1 | sed -e 's,$(SRC)/,,g'

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t