Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/runtime/gc/heap-out-util.c
ViewVC logotype

Annotation of /sml/trunk/src/runtime/gc/heap-out-util.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (view) (download) (as text)

1 : monnier 2 /* heap-out-util.c
2 :     *
3 :     * COPYRIGHT (c) 1993 by AT&T Bell Laboratories.
4 :     *
5 :     * Utility routines to export (or blast) an ML heap image.
6 :     */
7 :    
8 :     #include "ml-base.h"
9 :     #include "heap.h"
10 :     #include "ml-values.h"
11 :     #include "ml-heap-image.h"
12 :     #include "c-globals-tbl.h"
13 :     #include "heap-output.h"
14 :    
15 :    
16 :     /* HeapIO_WriteImageHeader:
17 :     *
18 :     * Blast out the ml_image_hdr_t.
19 :     */
20 :     status_t HeapIO_WriteImageHeader (writer_t *wr, int kind)
21 :     {
22 :     ml_image_hdr_t hdr;
23 :    
24 :     hdr.byteOrder = ORDER;
25 :     hdr.magic = ((kind == EXPORT_HEAP_IMAGE) || (kind == EXPORT_FN_IMAGE))
26 :     ? IMAGE_MAGIC : BLAST_MAGIC;
27 :     hdr.kind = kind;
28 :     /* hdr.arch[] */
29 :     /* hdr.opsys[] */
30 :    
31 :     WR_Write(wr, &hdr, sizeof(hdr));
32 :     if (WR_Error(wr))
33 :     return FAILURE;
34 :     else
35 :     return SUCCESS;
36 :    
37 :     } /* end of HeapIO_WriteImageHeader */
38 :    
39 :    
40 :     /* HeapIO_WriteExterns:
41 :     *
42 :     * Write out the external symbol table, returning the number of bytes
43 :     * written (-1 on error).
44 :     */
45 :     Addr_t HeapIO_WriteExterns (writer_t *wr, export_table_t *tbl)
46 :     {
47 :     int i, numExterns;
48 :     export_item_t *externs;
49 :     extern_tbl_hdr_t hdr;
50 :     Addr_t strSize, nbytes = sizeof(extern_tbl_hdr_t), padSzB;
51 :    
52 :     ExportedSymbols (tbl, &numExterns, &externs);
53 :    
54 :     for (strSize = 0, i = 0; i < numExterns; i++)
55 :     strSize += (strlen(externs[i]) + 1);
56 :     /* include padding to WORD_SZB bytes */
57 :     padSzB = ROUNDUP(strSize, WORD_SZB) - strSize;
58 :     strSize += padSzB;
59 :     nbytes += strSize;
60 :    
61 :     /* write out the header */
62 :     hdr.numExterns = numExterns;
63 :     hdr.externSzB = strSize;
64 :     WR_Write(wr, &hdr, sizeof(hdr));
65 :    
66 :     /* write out the external symbols */
67 :     for (i = 0; i < numExterns; i++) {
68 :     WR_Write (wr, externs[i], strlen(externs[i])+1);
69 :     }
70 :    
71 :     /* write the padding */
72 :     {
73 :     char pad[8] = {0, 0, 0, 0, 0, 0, 0, 0};
74 :     if (padSzB != 0) {
75 :     WR_Write (wr, pad, padSzB);
76 :     }
77 :     }
78 :    
79 :     done:;
80 :     FREE (externs);
81 :    
82 :     if (WR_Error(wr))
83 :     return -1;
84 :     else
85 :     return nbytes;
86 :    
87 :     } /* end of HeapIO_WriteExterns */
88 :    

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0