|
|
1.1 root 1: /* next.c: Functions for NeXT as target machine for GNU C compiler. */
2:
3: /* Note that the include below means that we can't debug routines in
4: i386.c when running on a COFF system. */
5:
6: #include "i386/i386.c"
7: #include "nextstep.c"
8:
9: void
10: machopic_output_stub (file, symb, stub)
11: FILE *file;
12: const char *symb, *stub;
13: {
14: static int label = 0;
15: label += 1;
16:
17: if (MACHOPIC_PURE)
18: machopic_picsymbol_stub_section ();
19: else
20: machopic_symbol_stub_section ();
21:
22: fprintf (file, "%s:\n", stub);
23: fprintf (file, "\t.indirect_symbol %s\n", symb);
24:
25: if (MACHOPIC_PURE)
26: {
27: fprintf (file, "\tcall LPC$%d\nLPC$%d:\tpopl %%eax\n", label, label);
28: fprintf (file, "\tmovl L%s$lazy_ptr-LPC$%d(%%eax),%%edx\n", symb, label);
29: fprintf (file, "\tjmp %%edx\n");
30: }
31: else
32: {
33: fprintf (file, "\tjmp *L%s$lazy_ptr\n", symb);
34: }
35:
36: fprintf (file, "%s_binder:\n", stub);
37:
38: if (MACHOPIC_PURE)
39: {
40: fprintf (file, "\tlea L%s$lazy_ptr-LPC$%d(%%eax),%%eax\n", symb, label);
41: fprintf (file, "\tpushl %%eax\n");
42: }
43: else
44: {
45: fprintf (file, "\t pushl $L%s$lazy_ptr\n", symb);
46: }
47:
48: fprintf (file, "\tjmp dyld_stub_binding_helper\n");
49:
50: machopic_lazy_symbol_ptr_section ();
51: fprintf (file, "L%s$lazy_ptr:\n", symb);
52: fprintf (file, "\t.indirect_symbol %s\n", symb);
53: fprintf (file, "\t.long %s_binder\n", stub);
54: }
55:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.