forked from Leffmann/vlink
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tosdefs.h
83 lines (73 loc) · 1.93 KB
/
tosdefs.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/* $VER: vlink tosdefs.h V0.13 (02.11.10)
*
* This file is part of vlink, a portable linker for multiple
* object formats.
* Copyright (c) 1997-2010 Frank Wille
*/
/* TOS program header */
typedef struct
{
uint8_t ph_branch[2]; /* branch to start of program (0x601a) */
uint8_t ph_tlen[4]; /* .text length */
uint8_t ph_dlen[4]; /* .data length */
uint8_t ph_blen[4]; /* .bss length */
uint8_t ph_slen[4]; /* length of symbol table */
uint8_t ph_magic[4];
uint8_t ph_flags[4]; /* Atari special flags */
uint8_t ph_abs[2]; /* has to be 0, otherwise no relocation takes place */
} PH;
/* DRI symbol table */
#define DRI_NAMELEN 8
struct DRIsym
{
char name[DRI_NAMELEN];
uint8_t type[2];
uint8_t value[4];
};
#define STYP_UNDEF 0
#define STYP_BSS 0x0100
#define STYP_TEXT 0x0200
#define STYP_DATA 0x0400
#define STYP_EXTERNAL 0x0800
#define STYP_REGISTER 0x1000
#define STYP_GLOBAL 0x2000
#define STYP_EQUATED 0x4000
#define STYP_DEFINED 0x8000
#define STYP_LONGNAME 0x0048
#define STYP_TFILE 0x0280
#define STYP_TFARC 0x02c0
/* default script */
static const char defaultscript[] =
"SECTIONS {\n"
" . = 0;\n"
" .text: {\n"
" *(.i* i* I*)\n"
" *(.t* t* T* .c* c* C*)\n"
" *(.f* f* F*)\n"
" PROVIDE(_etext = .);\n"
" PROVIDE(__etext = .);\n"
" . = ALIGN(2);\n"
" }\n"
" .data: {\n"
" PROVIDE(_LinkerDB = . + 0x8000);\n"
" PROVIDE(_SDA_BASE_ = . + 0x8000);\n"
" VBCC_CONSTRUCTORS\n"
" *(.rodata*)\n"
" *(.d* d* D*)\n"
" *(.sdata*)\n"
" *(__MERGED)\n"
" PROVIDE(_edata = .);\n"
" PROVIDE(__edata = .);\n"
" . = ALIGN(2);\n"
" }\n"
" .bss: {\n"
" *(.sbss*)\n"
" *(.scommon)\n"
" *(.b* b* B* .u* u* U*)\n"
" *(COMMON)\n"
" PROVIDE(_end = ALIGN(4));\n"
" PROVIDE(__end = ALIGN(4));\n"
" }\n"
"}\n";
/* t_ataritos.c prototypes */
void tos_writerelocs(struct GlobalVars *,FILE *,struct LinkedSection **);