aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/obj.h
blob: ddc03df770ef1041c9e933dc2607046e5c19db55 (plain) (blame)
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
#pragma once

#include "antcc.h"

typedef struct ObjFile {
   const char *infile, *outfile;
   uchar *textbegin, *textend;
   uchar *code;
   uchar dataalign, rodataalign, bssalign;
   uint nbss;
   vec_of(uchar) data, rodata;
} ObjFile;

enum relockind {
   REL_ABS64,
   REL_ABS32,
   REL_ABS32S,
   REL_PCREL32,
   REL_PLT32,
   REL_GOTPCRELX,
   REL_GOTPCRELX_REX,
   REL_CALL26,
   REL_ADR_PREL_LO21,
   REL_ADR_PREL_PG_HI21,
   REL_ADD_ABS_LO12_NC,
   REL_LD_PREL_LO19,
   REL_ADR_GOT_PAGE,
   REL_LD64_GOT_LO12_NC,
   NRELOCKIND,
};
enum section { Snone, Stext, Srodata, Sdata, Sbss };

extern ObjFile objout;
void objini(const char *infile, const char *outfile);
void objdeffunc(internstr nam, bool globl, uint off, uint siz);
enum section objhassym(internstr name, uint *off);
uint objnewdat(internstr name, enum section, bool globl, uint siz, uint align);
void objreloc(internstr sym, /*enum symflags*/int, enum relockind, enum section, uint off, s64int addend);
void objfini(bool emit);
bool fnisneeded(internstr);

/* vim:set ts=3 sw=3 expandtab: */