Fix macos

I fixed macos problem with test case 60.
Also tccrun mmap and debug code did not work.
This commit is contained in:
herman ten brugge
2026-01-06 16:01:28 +01:00
parent 1fe3e3bff5
commit 1401967ce2
3 changed files with 20 additions and 0 deletions

View File

@@ -818,8 +818,11 @@ static void asm_parse_directive(TCCState *s1, int global)
tok1 = tok; tok1 = tok;
next(); next();
if (tok < TOK_IDENT || tok >= SYM_FIRST_ANOM)
goto nolab;
sym = asm_label_find(tok); sym = asm_label_find(tok);
if (!sym) { if (!sym) {
nolab:
tcc_error("label not found: %s", get_tok_str(tok1, NULL)); tcc_error("label not found: %s", get_tok_str(tok1, NULL));
} }
/* XXX .size name,label2-label1 */ /* XXX .size name,label2-label1 */

View File

@@ -2615,6 +2615,10 @@ static int tcc_output_elf(TCCState *s1, FILE *f, int phnum, ElfW(Phdr) *phdr)
#if TARGETOS_FreeBSD || TARGETOS_FreeBSD_kernel #if TARGETOS_FreeBSD || TARGETOS_FreeBSD_kernel
ehdr.e_ident[EI_OSABI] = ELFOSABI_FREEBSD; ehdr.e_ident[EI_OSABI] = ELFOSABI_FREEBSD;
#elif TARGETOS_OpenBSD
ehdr.e_ident[EI_OSABI] = ELFOSABI_OPENBSD;
#elif TARGETOS_NetBSD
ehdr.e_ident[EI_OSABI] = ELFOSABI_NETBSD;
#elif defined TCC_TARGET_ARM && defined TCC_ARM_EABI #elif defined TCC_TARGET_ARM && defined TCC_ARM_EABI
ehdr.e_flags = EF_ARM_EABI_VER5; ehdr.e_flags = EF_ARM_EABI_VER5;
ehdr.e_flags |= s1->float_abi == ARM_HARD_FLOAT ehdr.e_flags |= s1->float_abi == ARM_HARD_FLOAT

View File

@@ -121,6 +121,9 @@ static int rt_mem(TCCState *s1, int size)
ftruncate(fd, size); ftruncate(fd, size);
ptr = mmap(NULL, size * 2, PROT_READ|PROT_EXEC|(s1->do_debug ? PROT_WRITE : 0), MAP_SHARED, fd, 0); ptr = mmap(NULL, size * 2, PROT_READ|PROT_EXEC|(s1->do_debug ? PROT_WRITE : 0), MAP_SHARED, fd, 0);
if (ptr == MAP_FAILED)
/* Some targets do not support PROT_EXEC + PROT_WRITE */
ptr = mmap(NULL, size * 2, PROT_READ|PROT_EXEC, MAP_SHARED, fd, 0);
/* mmap RW memory at fixed distance */ /* mmap RW memory at fixed distance */
prw = mmap((char*)ptr + size, size, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FIXED, fd, 0); prw = mmap((char*)ptr + size, size, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FIXED, fd, 0);
close(fd); close(fd);
@@ -356,13 +359,23 @@ redo:
if (copy == 3) if (copy == 3)
return 0; return 0;
#if defined TCC_TARGET_MACHO
for (k = 0; k < 3; ++k) { /* 0:rx, 1:ro, 3:rw sections */
#else
for (k = 0; k < 4; ++k) { /* 0:rx, 1:ro, 2:ro debug , 3:rw sections */ for (k = 0; k < 4; ++k) { /* 0:rx, 1:ro, 2:ro debug , 3:rw sections */
#endif
n = 0; addr = 0; n = 0; addr = 0;
for(i = 1; i < s1->nb_sections; i++) { for(i = 1; i < s1->nb_sections; i++) {
#if defined TCC_TARGET_MACHO
static const char shf[] = {
SHF_ALLOC|SHF_EXECINSTR, SHF_ALLOC, SHF_ALLOC|SHF_WRITE
};
#else
static const char shf[] = { static const char shf[] = {
SHF_ALLOC|SHF_EXECINSTR, SHF_ALLOC, 0, SHF_ALLOC|SHF_WRITE SHF_ALLOC|SHF_EXECINSTR, SHF_ALLOC, 0, SHF_ALLOC|SHF_WRITE
}; };
if (k == 2 && s1->do_debug == 0) continue; if (k == 2 && s1->do_debug == 0) continue;
#endif
s = s1->sections[i]; s = s1->sections[i];
if (shf[k] != (s->sh_flags & (SHF_ALLOC|SHF_WRITE|SHF_EXECINSTR))) if (shf[k] != (s->sh_flags & (SHF_ALLOC|SHF_WRITE|SHF_EXECINSTR)))
continue; continue;