#include "private.h"
#include "setjmp.h"
+#define LD_NAME L"gzip_ia64"
+
#define memzero(s, n) Memset((VOID *)(s), 0, (n))
#define memcpy(a,b,n) Memcpy((VOID *)(a),(b),(n))
#define CHUNK_FL_VALID 0x1
#define CHUNK_FL_LOAD 0x2
+#define CHUNK_FL_X 0x4
#define CHUNK_CAN_LOAD(n) chunks[(n)].flags |= CHUNK_FL_LOAD
#define CHUNK_NO_LOAD(n) chunks[(n)].flags &= ~CHUNK_FL_LOAD
continue;
}
+ if (bswap32(phdrs[i].p_flags) & PF_X)
+ chunks[i].flags |= CHUNK_FL_X;
+
CHUNK_CAN_LOAD(i); /* mark no load chunk */
VERB_PRT(3,
if (alloc_kmem((void *)low_addr, pages) == -1) {
VOID *new_addr;
- ERR_PRT((L"%s : AllocatePages(%d, 0x%lx) for kernel failed\n", LD_NAME, pages, low_addr));
+ VERB_PRT(1, (L"%s : AllocatePages(%d, 0x%lx) for kernel failed\n", LD_NAME, pages, low_addr));
if (ia64_can_relocate() == 0) {
ERR_PRT((L"relocation is disabled, cannot load kernel"));
/* unsigned arithmetic */
load_offset = (UINTN) (new_addr - ROUNDDOWN((UINTN) low_addr,256*MB));
- ERR_PRT((L"low_addr=0x%lx new_addr=0x%lx offset=0x%lx", low_addr, new_addr, load_offset));
+ VERB_PRT(1, (L"low_addr=0x%lx new_addr=0x%lx offset=0x%lx", low_addr, new_addr, load_offset));
/*
* correct various addresses for non-zero load_offset
if (cnt > outcnt) cnt = outcnt;
Memcpy(dst, src, cnt);
+ if (cp->flags & CHUNK_FL_X)
+ flush_dcache (dst, cnt);
file_offset += cnt;
outcnt -= cnt;