Mercurial > hg-old > index.cgi
view lwlink/lwlink.h @ 263:16c73b13ee0b 2.6 2.6
Branched for 2.6 release
author | lost |
---|---|
date | Tue, 22 Dec 2009 05:25:53 +0000 |
parents | e8d70b95ec41 |
children |
line wrap: on
line source
/* lwlink.h Copyright © 2009 William Astle This file is part of LWLINK. LWLINK is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Contains the main defs used by the linker */ #ifndef __lwlink_h_seen__ #define __lwlink_h_seen__ #include "expr.h" #define OUTPUT_DECB 0 // DECB multirecord format #define OUTPUT_RAW 1 // raw sequence of bytes #define OUTPUT_LWEX0 2 // LWOS LWEX binary version 0 typedef struct symtab_s symtab_t; struct symtab_s { unsigned char *sym; // symbol name int offset; // local offset // int realval; // resolved value symtab_t *next; // next symbol }; #define RELOC_NORM 0 // all default (16 bit) #define RELOC_8BIT 1 // only use the low 8 bits for the reloc #define RELOC_0BIT 2 // don't actual stuff a reloc anywhere! typedef struct reloc_s reloc_t; struct reloc_s { int offset; // where in the section int flags; // flags for the relocation lw_expr_stack_t *expr; // the expression to calculate it reloc_t *next; // ptr to next relocation }; typedef struct fileinfo_s fileinfo_t; #define SECTION_BSS 1 typedef struct { unsigned char *name; // name of the section int flags; // section flags int codesize; // size of the code unsigned char *code; // pointer to the code int loadaddress; // the actual load address of the section int processed; // was the section processed yet? symtab_t *localsyms; // local symbol table symtab_t *exportedsyms; // exported symbols table reloc_t *incompletes; // table of incomplete references fileinfo_t *file; // the file we are in } section_t; struct fileinfo_s { char *filename; unsigned char *filedata; long filesize; section_t *sections; int nsections; int islib; // set to true if the file is a "-l" option int forced; // set to true if the file is a "forced" include int resolves; // set to true if the file resolves a symbol // "sub" files (like in archives or libraries) int nsubs; fileinfo_t **subs; fileinfo_t *parent; }; struct section_list { section_t *ptr; // ptr to section structure int forceaddr; // was this force to an address by the link script? }; #ifndef __link_c_seen__ extern struct section_list *sectlist; extern int nsects; #endif #ifndef __lwlink_c_seen__ extern int debug_level; extern int outformat; extern char *outfile; extern int ninputfiles; extern fileinfo_t **inputfiles; extern char *scriptfile; extern int nlibdirs; extern char **libdirs; extern int nscriptls; extern char **scriptls; extern int symerr; extern char *map_file; #define __lwlink_E__ extern #else #define __lwlink_E__ #endif // __lwlink_c_seen__ __lwlink_E__ void add_input_file(char *fn); __lwlink_E__ void add_input_library(char *fn); __lwlink_E__ void add_library_search(char *fn); __lwlink_E__ void add_section_base(char *fn); #undef __lwlink_E__ struct scriptline_s { char *sectname; // name of section, NULL for wildcard int loadat; // address to load at (or -1) int noflags; // flags to NOT have int yesflags; // flags to HAVE }; typedef struct { int nlines; // number of lines in the script struct scriptline_s *lines; // the parsed script lines (section) int padsize; // the size to pad to, -1 for none char *execsym; // entry point symbol int execaddr; // execution address (entry point) int stacksize; // stack size } linkscript_t; #ifndef __script_c_seen__ extern linkscript_t linkscript; #endif #endif //__lwlink_h_seen__