diff options
| author | David Mertens <dcmertens.perl@gmail.com> | 2017-01-06 16:56:19 -0500 |
|---|---|---|
| committer | David Mertens <dcmertens.perl@gmail.com> | 2017-01-06 16:56:23 -0500 |
| commit | 5d1bc3fbd4d65af960992fb48ed76990ec673239 (patch) | |
| tree | b4caa34c7ce97829752b8e106ca188762da447f8 /tccrun.c | |
| parent | 0486939291bfe4406f688ffc8a62b4da2c7a95cf (diff) | |
| download | tinycc-5d1bc3fbd4d65af960992fb48ed76990ec673239.tar.gz tinycc-5d1bc3fbd4d65af960992fb48ed76990ec673239.tar.bz2 | |
Architecture-specific section alignment
Tests found excessive cache thrashing on x86-64 architectures. The
problem was traced to the alignment of sections. This patch sets up
an architecture-specific alignment of 512 bytes for x86-64 and 16
bytes for all others. It uses preprocessor directives that, hopefully,
make it easy to tweak for other architectures.
Diffstat (limited to 'tccrun.c')
| -rw-r--r-- | tccrun.c | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -174,6 +174,12 @@ LIBTCCAPI int tcc_run(TCCState *s1, int argc, char **argv) return (*prog_main)(argc, argv); } +#ifdef TCC_TARGET_X86_64 + #define SECTION_ALIGNMENT 511 +#else + #define SECTION_ALIGNMENT 15 +#endif + /* relocate code. Return -1 on error, required size if ptr is NULL, otherwise copy code into buffer passed by the caller */ static int tcc_relocate_ex(TCCState *s1, void *ptr) @@ -205,7 +211,7 @@ static int tcc_relocate_ex(TCCState *s1, void *ptr) s = s1->sections[i]; if (0 == (s->sh_flags & SHF_ALLOC)) continue; - offset = (offset + 15) & ~15; + offset = (offset + SECTION_ALIGNMENT) & ~SECTION_ALIGNMENT; s->sh_addr = mem ? mem + offset : 0; offset += s->data_offset; } |
