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 | #endif | 1460 | #endif |
| 1461 | tcc_add_support(s1, TCC_LIBTCC1); | 1461 | tcc_add_support(s1, TCC_LIBTCC1); |
| 1462 | #ifndef TCC_TARGET_MACHO | ||
| 1462 | /* add crt end if not memory output */ | 1463 | /* add crt end if not memory output */ |
| 1463 | if (s1->output_type != TCC_OUTPUT_MEMORY) | 1464 | if (s1->output_type != TCC_OUTPUT_MEMORY) |
| 1464 | tcc_add_crt(s1, "crtn.o"); | 1465 | tcc_add_crt(s1, "crtn.o"); |
| 1466 | #endif | ||
| 1465 | } | 1467 | } |
| 1466 | } | 1468 | } |
| 1467 | #endif | 1469 | #endif |
| @@ -419,6 +419,7 @@ static void convert_symbol(TCCState *s1, struct macho *mo, struct nlist_64 *pn) · 418 unmodified lines | |||
| 419 | case STT_NOTYPE: | 419 | case STT_NOTYPE: |
| 420 | case STT_OBJECT: | 420 | case STT_OBJECT: |
| 421 | case STT_FUNC: | 421 | case STT_FUNC: |
| 422 | case STT_SECTION: | ||
| 422 | n.n_type = 0xe; /* default type is N_SECT */ | 423 | n.n_type = 0xe; /* default type is N_SECT */ |
| 423 | break; | 424 | break; |
| 424 | case STT_FILE: | 425 | case STT_FILE: |
| @@ -609,7 +610,7 @@ static void collect_sections(TCCState *s1, struct macho *mo) · 184 unmodified lines | |||
| 609 | case SHT_FINI_ARRAY: sk = sk_fini; break; | 610 | case SHT_FINI_ARRAY: sk = sk_fini; break; |
| 610 | case SHT_NOBITS: sk = sk_bss; break; | 611 | case SHT_NOBITS: sk = sk_bss; break; |
| 611 | case SHT_SYMTAB: sk = sk_discard; break; | 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 | case SHT_RELX: sk = sk_discard; break; | 614 | case SHT_RELX: sk = sk_discard; break; |
| 614 | case SHT_LINKEDIT: sk = sk_linkedit; break; | 615 | case SHT_LINKEDIT: sk = sk_linkedit; break; |
| 615 | case SHT_PROGBITS: | 616 | case SHT_PROGBITS: |
| @@ -809,6 +810,7 @@ ST_FUNC int macho_output_file(TCCState *s1, const char *filename) · 193 unmodified lines | |||
| 809 | if (s1->verbose) | 810 | if (s1->verbose) |
| 810 | printf("<- %s\n", filename); | 811 | printf("<- %s\n", filename); |
| 811 | 812 | ||
| 813 | tcc_add_runtime(s1); | ||
| 812 | resolve_common_syms(s1); | 814 | resolve_common_syms(s1); |
| 813 | create_symtab(s1, &mo); | 815 | create_symtab(s1, &mo); |
| 814 | check_relocs(s1, &mo); | 816 | check_relocs(s1, &mo); |