linker: New sources to manage the ELF program header table.

This patch introduces two new source files containing a set of functions
to manage the program header table in an ELF binary, including the ability
to load PT_LOAD segments, and apply PT_GNU_RELRO protection.

Note: the files are not used currently, this will appear in a series
      of future patches that will gradually modify linker.c to use
      the phdr_table_xxx functions properly.

Change-Id: Ia3d4c1ff5fc3e265d8258b64b492f4e643f51bdc
This commit is contained in:
David 'Digit' Turner
2012-06-19 11:21:29 +02:00
parent 20bc061dc7
commit c1bd559d5b
4 changed files with 795 additions and 1 deletions

View File

@@ -37,7 +37,23 @@
#undef PAGE_MASK
#undef PAGE_SIZE
#define PAGE_SIZE 4096
#define PAGE_MASK 4095
#define PAGE_MASK (PAGE_SIZE-1)
/* Convenience macros to make page address/offset computations more explicit */
/* Returns the address of the page starting at address 'x' */
#define PAGE_START(x) ((x) & ~PAGE_MASK)
/* Returns the offset of address 'x' in its memory page, i.e. this is the
* same than 'x' - PAGE_START(x) */
#define PAGE_OFFSET(x) ((x) & PAGE_MASK)
/* Returns the address of the next page after address 'x', unless 'x' is
* itself at the start of a page. Equivalent to:
*
* (x == PAGE_START(x)) ? x : PAGE_START(x)+PAGE_SIZE
*/
#define PAGE_END(x) PAGE_START((x) + (PAGE_SIZE-1))
void debugger_init();
const char *addr_to_name(unsigned addr);