fix: previous two commits

This commit is contained in:
Jonathan M. Wilbur 2024-07-31 04:15:45 -04:00
parent e4d874d88a
commit f15008da05
7 changed files with 12 additions and 32 deletions

View File

@ -883,8 +883,12 @@ static void asm_parse_directive(TCCState *s1, int global)
}
}
last_text_section = cur_text_section;
if (tok1 == TOK_ASMDIR_section)
if (tok1 == TOK_ASMDIR_section) {
use_section(s1, sname);
/* The section directive supports flags, but they are unsupported.
For now, just assume any section contains code. */
cur_text_section->sh_flags |= SHF_EXECINSTR;
}
else
push_section(s1, sname);
/* If we just allocated a new section reset its alignment to
@ -893,9 +897,6 @@ static void asm_parse_directive(TCCState *s1, int global)
if (old_nb_section != s1->nb_sections)
cur_text_section->sh_addralign = 1;
}
/* The section directive supports flags, but they are unsupported.
For now, just assume any section contains code. */
cur_text_section->sh_flags |= SHF_EXECINSTR;
break;
case TOK_ASMDIR_previous:
{

14
tccpp.c
View File

@ -1506,20 +1506,6 @@ static int expr_preprocess(TCCState *s1)
tokc.i = c;
} else {
/* if undefined macro, replace with zero */
next_nomacro();
// If the undefined macro is followed by parens, just skip them.
if (tok == '(') {
int bracket_depth = 1;
while (bracket_depth > 0) {
next();
if (tok == '(')
bracket_depth++;
else if (tok == ')')
bracket_depth--;
}
} else {
unget_tok(tok); // Is this actually the function I want?
}
tok = TOK_CINT;
tokc.i = 0;
}

View File

@ -0,0 +1 @@
AAAAAAAAA

View File

@ -1,3 +1,5 @@
#include <stdio.h>
/* Previously in TinyCC, ELF sections defined in attributes would always have
the execute bit not set, so you would get segmentation faults when code in these
sections was exectuted. This file is a minimal example of a file that will put
@ -9,5 +11,7 @@ int wumbo (int arg) {
}
int main () {
return wumbo(2);
wumbo(2);
puts("hi");
return 0;
}

View File

@ -0,0 +1 @@
hi

View File

@ -1,13 +0,0 @@
int main () {
// This used to evaluate to 0 (0), which is invalid.
// Now it should evaluate to 0.
#if WUMBOED(WUMBO)
#endif
// Just trying a more complicated test case.
#if WUMBO && defined(WUMBOLOGY) || WUMBOED(WUMBO) && !WUMBOLOGY
return 0;
#elif WUMBO && defined(WUMBOLOGY) || WUMBOED(WUMBO) && !WUMBOLOGY
return 1;
#endif
}