uncovered by the backtrace/boundcheck tests: * handle STT_SECTION symbols * call tcc_add_runtime (to get the bcheck.o/bt-exe.o files added) * add .stab strtab into segments (we should probably add all stab syms to the output LC_SYMTAB eventually, but right now TCC uses 32 bit stabs, while mach-o uses 32/64bit stabs
Unified · Split
| @@ -1459,9 +1459,11 @@ ST_FUNC void tcc_add_runtime(TCCState *s1) · 1458 unmodified lines | ||
| 1459 | 1459 | } |
| 1460 | 1460 | #endif |
| 1461 | 1461 | tcc_add_support(s1, TCC_LIBTCC1); |
| 1462 | +#ifndef TCC_TARGET_MACHO | |
| 1462 | 1463 | /* add crt end if not memory output */ |
| 1463 | 1464 | if (s1->output_type != TCC_OUTPUT_MEMORY) |
| 1464 | 1465 | tcc_add_crt(s1, "crtn.o"); |
| 1466 | +#endif | |
| 1465 | 1467 | } |
| 1466 | 1468 | } |
| 1467 | 1469 | #endif |
| @@ -419,6 +419,7 @@ static void convert_symbol(TCCState *s1, struct macho *mo, struct nlist_64 *pn) · 418 unmodified lines | ||
| 419 | 419 | case STT_NOTYPE: |
| 420 | 420 | case STT_OBJECT: |
| 421 | 421 | case STT_FUNC: |
| 422 | + case STT_SECTION: | |
| 422 | 423 | n.n_type = 0xe; /* default type is N_SECT */ |
| 423 | 424 | break; |
| 424 | 425 | case STT_FILE: |
| @@ -609,7 +610,7 @@ static void collect_sections(TCCState *s1, struct macho *mo) · 184 unmodified lines | ||
| 609 | 610 | case SHT_FINI_ARRAY: sk = sk_fini; break; |
| 610 | 611 | case SHT_NOBITS: sk = sk_bss; break; |
| 611 | 612 | case SHT_SYMTAB: sk = sk_discard; break; |
| 612 | − case SHT_STRTAB: sk = sk_discard; break; | |
| 613 | + case SHT_STRTAB: sk = s == stabstr_section ? sk_ro_data : sk_discard; break; | |
| 613 | 614 | case SHT_RELX: sk = sk_discard; break; |
| 614 | 615 | case SHT_LINKEDIT: sk = sk_linkedit; break; |
| 615 | 616 | case SHT_PROGBITS: |
| @@ -809,6 +810,7 @@ ST_FUNC int macho_output_file(TCCState *s1, const char *filename) · 193 unmodified lines | ||
| 809 | 810 | if (s1->verbose) |
| 810 | 811 | printf("<- %s\n", filename); |
| 811 | 812 | |
| 813 | + tcc_add_runtime(s1); | |
| 812 | 814 | resolve_common_syms(s1); |
| 813 | 815 | create_symtab(s1, &mo); |
| 814 | 816 | check_relocs(s1, &mo); |