History

output symbol type and size

That is not available on osx so I tweaked the gas.c api a little to conditionally output the two directives.

Quentin Carbonneaux committed 4 years ago

Commit 6ca93991 parent 7a7a5f43 files · +34 −15Browse files

Unified · Split

3 files
  1. all.h +6 −0
  2. gas.c +26 −0
  3. main.c +2 −15
all.h+6−0
@@ -523,9 +523,15 @@ void spill(Fn *); · 522 unmodified lines
523void rega(Fn *);523void rega(Fn *);
524 524
525/* gas.c */525/* gas.c */
526enum Asm {
527 Gasmacho,
528 Gaself,
529};
526extern char *gasloc;530extern char *gasloc;
527extern char *gassym;531extern char *gassym;
532void gasinit(enum Asm);
528void gasemitlnk(char *, Lnk *, char *, FILE *);533void gasemitlnk(char *, Lnk *, char *, FILE *);
534void gasemitfntail(char *, FILE *);
529void gasemitdat(Dat *, FILE *);535void gasemitdat(Dat *, FILE *);
530int gasstash(void *, int);536int gasstash(void *, int);
531void gasemitfin(FILE *);537void gasemitfin(FILE *);
gas.c+26−0
@@ -2,6 +2,23 @@ · 1 unmodified line
2 2
3 3
4char *gasloc, *gassym;4char *gasloc, *gassym;
5static int gasasm;
6
7void
8gasinit(enum Asm asmmode)
9{
10 gasasm = asmmode;
11 switch (gasasm) {
12 case Gaself:
13 gasloc = ".L";
14 gassym = "";
15 break;
16 case Gasmacho:
17 gasloc = "L";
18 gassym = "_";
19 break;
20 }
21}
5 22
6void23void
7gasemitlnk(char *n, Lnk *l, char *s, FILE *f)24gasemitlnk(char *n, Lnk *l, char *s, FILE *f)
@@ -24,6 +41,15 @@ gasemitlnk(char *n, Lnk *l, char *s, FILE *f) · 16 unmodified lines
24 fprintf(f, "%s%s:\n", p, n);41 fprintf(f, "%s%s:\n", p, n);
25}42}
26 43
44void
45gasemitfntail(char *fn, FILE *f)
46{
47 if (gasasm == Gaself) {
48 fprintf(f, ".type %s, @function\n", fn);
49 fprintf(f, ".size %s, .-%s\n", fn, fn);
50 }
51}
52
27void53void
28gasemitdat(Dat *d, FILE *f)54gasemitdat(Dat *d, FILE *f)
29{55{
main.c+2−15
@@ -19,11 +19,6 @@ static struct TMap { · 18 unmodified lines
19 { 0, 0 }19 { 0, 0 }
20};20};
21 21
22enum Asm {
23 Gasmacho,
24 Gaself,
25};
26
27char debug['Z'+1] = {22char debug['Z'+1] = {
28 ['P'] = 0, /* parsing */23 ['P'] = 0, /* parsing */
29 ['M'] = 0, /* memory optimization */24 ['M'] = 0, /* memory optimization */
@@ -101,6 +96,7 @@ func(Fn *fn) · 71 unmodified lines
101 fn->rpo[n]->link = fn->rpo[n+1];96 fn->rpo[n]->link = fn->rpo[n+1];
102 if (!dbg) {97 if (!dbg) {
103 T.emitfn(fn, outf);98 T.emitfn(fn, outf);
99 gasemitfntail(fn->name, outf);
104 fprintf(outf, "/* end function %s */\n\n", fn->name);100 fprintf(outf, "/* end function %s */\n\n", fn->name);
105 } else101 } else
106 fprintf(stderr, "\n");102 fprintf(stderr, "\n");
@@ -174,16 +170,7 @@ main(int ac, char *av[]) · 67 unmodified lines
174 exit(c != 'h');170 exit(c != 'h');
175 }171 }
176 172
177 switch (asmmode) {173 gasinit(asmmode);
178 case Gaself:
179 gasloc = ".L";
180 gassym = "";
181 break;
182 case Gasmacho:
183 gasloc = "L";
184 gassym = "_";
185 break;
186 }
187 174
188 do {175 do {
189 f = av[optind];176 f = av[optind];

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