History

for_each_element for all; add tcc_exit_state

this moves the for_each_element macro to tcc.h and adds a tcc_exit_state (and uses it) pairing with tcc_enter_state.

Michael Matz committed 6 years ago

Commit bbccb131 parent 1320d853 files · +17 −14Browse files

Unified · Split

3 files
  1. libtcc.c +10 −8
  2. tcc.h +7 −0
  3. tccelf.c +0 −6
libtcc.c+10−8
@@ -502,6 +502,12 @@ PUB_FUNC void tcc_enter_state(TCCState *s1) · 501 unmodified lines
502 tcc_state = s1;502 tcc_state = s1;
503}503}
504 504
505PUB_FUNC void tcc_exit_state(void)
506{
507 tcc_state = NULL;
508 POST_SEM();
509}
510
505static void error1(int mode, const char *fmt, va_list ap)511static void error1(int mode, const char *fmt, va_list ap)
506{512{
507 char buf[2048];513 char buf[2048];
@@ -513,11 +519,9 @@ static void error1(int mode, const char *fmt, va_list ap) · 5 unmodified lines
513 /* can happen only if called from tcc_malloc(): 'out of memory' */519 /* can happen only if called from tcc_malloc(): 'out of memory' */
514 goto no_file;520 goto no_file;
515 521
516 if (!s1->error_set_jmp_enabled) {522 if (s1 && !s1->error_set_jmp_enabled)
517 /* tcc_state just was set by tcc_enter_state() */523 /* tcc_state just was set by tcc_enter_state() */
518 tcc_state = NULL;524 tcc_exit_state();
519 POST_SEM();
520 }
521 525
522 if (mode == ERROR_WARN) {526 if (mode == ERROR_WARN) {
523 if (s1->warn_none)527 if (s1->warn_none)
@@ -684,8 +688,7 @@ static int tcc_compile(TCCState *s1, int filetype, const char *str, int fd) · 160 unmodified lines
684 Alternatively we could use thread local storage for those global688 Alternatively we could use thread local storage for those global
685 variables, which may or may not have advantages */689 variables, which may or may not have advantages */
686 690
687 WAIT_SEM();691 tcc_enter_state(s1);
688 tcc_state = s1;
689 692
690 if (setjmp(s1->error_jmp_buf) == 0) {693 if (setjmp(s1->error_jmp_buf) == 0) {
691 int is_asm;694 int is_asm;
@@ -722,8 +725,7 @@ static int tcc_compile(TCCState *s1, int filetype, const char *str, int fd) · 30 unmodified lines
722 preprocess_end(s1);725 preprocess_end(s1);
723 tccelf_end_file(s1);726 tccelf_end_file(s1);
724 727
725 tcc_state = NULL;728 tcc_exit_state();
726 POST_SEM();
727 return s1->nb_errors != 0 ? -1 : 0;729 return s1->nb_errors != 0 ? -1 : 0;
728}730}
729 731
tcc.h+7−0
@@ -1544,6 +1544,12 @@ ST_FUNC void *tcc_get_symbol_err(TCCState *s, const char *name); · 1543 unmodified lines
1544 1544
1545ST_FUNC int set_global_sym(TCCState *s1, const char *name, Section *sec, long offs);1545ST_FUNC int set_global_sym(TCCState *s1, const char *name, Section *sec, long offs);
1546 1546
1547/* Browse each elem of type <type> in section <sec> starting at elem <startoff>
1548 using variable <elem> */
1549#define for_each_elem(sec, startoff, elem, type) \
1550 for (elem = (type *) sec->data + startoff; \
1551 elem < (type *) (sec->data + sec->data_offset); elem++)
1552
1547#ifndef TCC_TARGET_PE1553#ifndef TCC_TARGET_PE
1548ST_FUNC int tcc_load_dll(TCCState *s1, int fd, const char *filename, int level);1554ST_FUNC int tcc_load_dll(TCCState *s1, int fd, const char *filename, int level);
1549ST_FUNC int tcc_load_ldscript(TCCState *s1, int fd);1555ST_FUNC int tcc_load_ldscript(TCCState *s1, int fd);
@@ -1789,6 +1795,7 @@ ST_FUNC void gen_makedeps(TCCState *s, const char *target, const char *filename) · 239 unmodified lines
1789#define total_bytes TCC_STATE_VAR(total_bytes)1795#define total_bytes TCC_STATE_VAR(total_bytes)
1790 1796
1791PUB_FUNC void tcc_enter_state(TCCState *s1);1797PUB_FUNC void tcc_enter_state(TCCState *s1);
1798PUB_FUNC void tcc_exit_state(void);
1792 1799
1793/********************************************************/1800/********************************************************/
1794#endif /* _TCC_H */1801#endif /* _TCC_H */
tccelf.c+0−6
@@ -855,12 +855,6 @@ ST_FUNC struct sym_attr *get_sym_attr(TCCState *s1, int index, int alloc) · 854 unmodified lines
855 return &s1->sym_attrs[index];855 return &s1->sym_attrs[index];
856}856}
857 857
858/* Browse each elem of type <type> in section <sec> starting at elem <startoff>
859 using variable <elem> */
860#define for_each_elem(sec, startoff, elem, type) \
861 for (elem = (type *) sec->data + startoff; \
862 elem < (type *) (sec->data + sec->data_offset); elem++)
863
864/* In an ELF file symbol table, the local symbols must appear below858/* In an ELF file symbol table, the local symbols must appear below
865 the global and weak ones. Since TCC cannot sort it while generating859 the global and weak ones. Since TCC cannot sort it while generating
866 the code, we must do it after. All the relocation tables are also860 the code, we must do it after. All the relocation tables are also

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t