rdoff: add back rdfutils.h missing from previous checkin
[nasm.git] / rdoff / ldsegs.h
blob7dccaace0a3a7aa8615acb44fb2ab97c745e309e
1 /*
2 * ldsegs.h Data for 'ldrdf' to determine what to do with different
3 * types of segment. This may be useful in other contexts also.
4 */
6 #ifndef RDOFF_LDSEGS_H
7 #define RDOFF_LDSEGS_H 1
10 struct segconfig {
11 uint16_t typelow, typehi; /* range of seg nos for which this is valid */
12 char *typedesc; /* a description of the segment type */
13 uint16_t dowhat; /* one of the SEG_xxxx values below */
14 uint16_t mergetype; /* if SEG_MERGE what type segment do we merge
15 with?
16 0 -> same type of segment. This type is also
17 used with SEG_NEWSEG. */
20 #define SEG_IGNORE 0
21 #define SEG_NEWSEG 1
22 #define SEG_MERGE 2
24 #define SEGCONFIGMAX 11
26 struct segconfig sconft[SEGCONFIGMAX] = {
27 {0x0000, 0x0000, "NULL segment", 0, 0},
28 {0x0001, 0x0001, "text", 2, 0},
29 {0x0002, 0x0002, "data", 2, 0},
30 {0x0003, 0x0003, "comment(ignored)", 0, 0},
31 {0x0004, 0x0005, "comment(kept)", 2, 0},
32 {0x0006, 0x0007, "debug information", 2, 0},
33 {0x0008, 0x001F, "reserved(general extensions)", 1, 0},
34 {0x0020, 0x0FFF, "reserved(MOSCOW)", 1, 0},
35 {0x1000, 0x7FFF, "reserved(system dependant)", 1, 0},
36 {0x8000, 0xFFFE, "reserved(other)", 1, 0},
37 {0xFFFF, 0xFFFF, "invalid segment", 0, 0}
40 #define getsegconfig(target,number) \
41 { \
42 int _i; \
43 int _t = number; \
44 for (_i = 0; _i < SEGCONFIGMAX; _i++) \
45 if (_t >= sconft[_i].typelow && _t <= sconft[_i].typehi) \
46 { \
47 target = sconft[_i]; \
48 if (target.mergetype == 0) target.mergetype = _t; \
49 break; \
50 } \
51 if (_i == SEGCONFIGMAX) \
52 { \
53 fprintf(stderr, "PANIC: can't find segment %04X in segconfig\n",\
54 _t); \
55 exit(1); \
56 } \
59 #endif