diff options
| author | seyko <seyko2@gmail.com> | 2015-04-10 06:53:48 +0300 |
|---|---|---|
| committer | seyko <seyko2@gmail.com> | 2015-04-10 06:53:48 +0300 |
| commit | 5cd4393a542ef4c64df7dcbb3fbe3a629666239d (patch) | |
| tree | 999d6146f8af08ce50245a7df1389b420677a5a0 | |
| parent | 089ce6235c99638ad4542a57af4d09e2be0efc88 (diff) | |
| download | tinycc-5cd4393a542ef4c64df7dcbb3fbe3a629666239d.tar.gz tinycc-5cd4393a542ef4c64df7dcbb3fbe3a629666239d.tar.bz2 | |
handle a -s option by executing sstrip/strip program
| -rw-r--r-- | libtcc.c | 4 | ||||
| -rw-r--r-- | tcc.h | 1 | ||||
| -rw-r--r-- | tccelf.c | 14 |
3 files changed, 18 insertions, 1 deletions
@@ -1967,10 +1967,12 @@ PUB_FUNC int tcc_parse_args(TCCState *s, int argc, char **argv) case TCC_OPTION_dumpversion: printf ("%s\n", TCC_VERSION); exit(0); + case TCC_OPTION_s: + s->do_strip = 1; + break; case TCC_OPTION_O: case TCC_OPTION_pedantic: case TCC_OPTION_pipe: - case TCC_OPTION_s: case TCC_OPTION_x: /* ignored */ break; @@ -613,6 +613,7 @@ struct TCCState { /* compile with debug symbol (and use them if error during execution) */ int do_debug; + int do_strip; #ifdef CONFIG_TCC_BCHECK /* compile with built-in memory and bounds checker */ int do_bounds_check; @@ -2689,6 +2689,20 @@ static int elf_output_file(TCCState *s1, const char *filename) /* Create the ELF file with name 'filename' */ ret = tcc_write_elf_file(s1, filename, phnum, phdr, file_offset, sec_order); + if (s1->do_strip) { + const char *strip = "sstrip "; // super strip utility from ELFkickers + const char *null = " 2> /dev/null"; + int len = strlen(strip) + strlen(filename) + strlen(null) + 1; + { + int rc; + char buf[len]; + sprintf(buf, "%s%s%s", strip, filename, null); + rc = system(buf); + if (rc) { + system(buf+1); // call a strip utility from binutils + } + } + } the_end: tcc_free(s1->symtab_to_dynsym); tcc_free(sec_order); |
