forked from pool/elilo
This commit is contained in:
parent
c5cde82155
commit
212982063b
475
elilo-3.8-cvs20080127.diff
Normal file
475
elilo-3.8-cvs20080127.diff
Normal file
@ -0,0 +1,475 @@
|
|||||||
|
diff -ur elilo-3.8/Make.defaults elilo/Make.defaults
|
||||||
|
--- elilo-3.8/Make.defaults 2007-07-20 21:47:25.000000000 +0200
|
||||||
|
+++ elilo/Make.defaults 2008-01-12 00:53:33.000000000 +0100
|
||||||
|
@@ -68,7 +68,7 @@
|
||||||
|
|
||||||
|
OPTIMFLAGS = -O2
|
||||||
|
DEBUGFLAGS = -Wall
|
||||||
|
-CFLAGS = $(OPTIMFLAGS) -fpic -fshort-wchar $(DEBUGFLAGS)
|
||||||
|
+CFLAGS = $(OPTIMFLAGS) -fno-strict-aliasing -fpic -fshort-wchar $(DEBUGFLAGS)
|
||||||
|
LDFLAGS = -nostdlib -znocombreloc
|
||||||
|
INSTALL = install
|
||||||
|
|
||||||
|
diff -ur elilo-3.8/alternate.c elilo/alternate.c
|
||||||
|
--- elilo-3.8/alternate.c 2007-07-20 21:47:26.000000000 +0200
|
||||||
|
+++ elilo/alternate.c 2008-01-12 00:53:33.000000000 +0100
|
||||||
|
@@ -56,7 +56,7 @@
|
||||||
|
* Please note that no fatal error is reported by this function
|
||||||
|
*/
|
||||||
|
INTN
|
||||||
|
-alternate_kernel(CHAR16 *buffer, INTN size)
|
||||||
|
+alternate_kernel(CHAR16 *buffer, UINTN size)
|
||||||
|
{
|
||||||
|
EFI_STATUS status;
|
||||||
|
INTN ret = -1;
|
||||||
|
diff -ur elilo-3.8/choosers/simple.c elilo/choosers/simple.c
|
||||||
|
--- elilo-3.8/choosers/simple.c 2007-07-20 21:47:26.000000000 +0200
|
||||||
|
+++ elilo/choosers/simple.c 2008-01-12 00:53:33.000000000 +0100
|
||||||
|
@@ -220,7 +220,7 @@
|
||||||
|
{
|
||||||
|
fops_fd_t fd;
|
||||||
|
EFI_STATUS status;
|
||||||
|
- INTN len, i;
|
||||||
|
+ UINTN len, i;
|
||||||
|
CHAR16 *filename;
|
||||||
|
CHAR8 buf[256];
|
||||||
|
|
||||||
|
diff -ur elilo-3.8/choosers/textmenu.c elilo/choosers/textmenu.c
|
||||||
|
--- elilo-3.8/choosers/textmenu.c 2007-07-20 21:47:26.000000000 +0200
|
||||||
|
+++ elilo/choosers/textmenu.c 2008-01-12 00:53:33.000000000 +0100
|
||||||
|
@@ -186,12 +186,12 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
static INTN
|
||||||
|
-read_message_file(INTN msg, INT8 *buf, INTN max)
|
||||||
|
+read_message_file(INTN msg, UINT8 *buf, UINTN max)
|
||||||
|
{
|
||||||
|
CHAR16 *filename;
|
||||||
|
fops_fd_t message_fd;
|
||||||
|
EFI_STATUS status;
|
||||||
|
- INTN len = max;
|
||||||
|
+ UINTN len = max;
|
||||||
|
|
||||||
|
if (msg > 10) return 0;
|
||||||
|
|
||||||
|
diff -ur elilo-3.8/elilo.h elilo/elilo.h
|
||||||
|
--- elilo-3.8/elilo.h 2005-12-01 22:42:59.000000000 +0100
|
||||||
|
+++ elilo/elilo.h 2008-01-12 00:53:33.000000000 +0100
|
||||||
|
@@ -183,7 +183,7 @@
|
||||||
|
extern INTN load_file(CHAR16 *, memdesc_t *);
|
||||||
|
|
||||||
|
/* from alternate.c */
|
||||||
|
-extern INTN alternate_kernel(CHAR16 *, INTN);
|
||||||
|
+extern INTN alternate_kernel(CHAR16 *, UINTN);
|
||||||
|
|
||||||
|
/* from bootparams.c */
|
||||||
|
extern VOID *create_boot_params (CHAR16 *, memdesc_t *, memdesc_t *, UINTN *);
|
||||||
|
diff -ur elilo-3.8/ia32/gzip.c elilo/ia32/gzip.c
|
||||||
|
--- elilo-3.8/ia32/gzip.c 2005-12-01 22:42:59.000000000 +0100
|
||||||
|
+++ elilo/ia32/gzip.c 2008-01-13 01:12:19.000000000 +0100
|
||||||
|
@@ -153,7 +153,7 @@
|
||||||
|
int
|
||||||
|
fill_inbuf(void)
|
||||||
|
{
|
||||||
|
- INTN expected, nread;
|
||||||
|
+ UINTN expected, nread;
|
||||||
|
EFI_STATUS status;
|
||||||
|
|
||||||
|
expected = nread = INBUFSIZE;
|
||||||
|
@@ -277,7 +277,7 @@
|
||||||
|
* the relevant header information.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
-first_block (const char *buf, long blocksize)
|
||||||
|
+first_block (const unsigned char *buf, long blocksize)
|
||||||
|
{
|
||||||
|
Elf32_Ehdr *elf;
|
||||||
|
Elf32_Phdr *phdrs;
|
||||||
|
@@ -430,7 +430,7 @@
|
||||||
|
static const CHAR8 helicopter[4] = { '|' , '/' , '-' , '\\' };
|
||||||
|
static UINTN heli_count;
|
||||||
|
struct segment *cp;
|
||||||
|
- char *src, *dst;
|
||||||
|
+ unsigned char *src, *dst;
|
||||||
|
long cnt;
|
||||||
|
|
||||||
|
if (!outcnt) return;
|
||||||
|
@@ -468,7 +468,7 @@
|
||||||
|
file_offset += skip;
|
||||||
|
outcnt -= skip;
|
||||||
|
}
|
||||||
|
- dst = (char *)cp->addr + (file_offset - cp->offset);
|
||||||
|
+ dst = (unsigned char *)cp->addr + (file_offset - cp->offset);
|
||||||
|
cnt = cp->offset + cp->size - file_offset;
|
||||||
|
if (cnt > outcnt)
|
||||||
|
cnt = outcnt;
|
||||||
|
@@ -482,7 +482,7 @@
|
||||||
|
/* See if we are at the end of this chunk */
|
||||||
|
if (file_offset == cp->offset + cp->size) {
|
||||||
|
if (cp->bss_sz) {
|
||||||
|
- dst = (char *)cp->addr + cp->size;
|
||||||
|
+ dst = (unsigned char *)cp->addr + cp->size;
|
||||||
|
Memset(dst, 0, cp->bss_sz);
|
||||||
|
}
|
||||||
|
nextchunk();
|
||||||
|
diff -ur elilo-3.8/ia32/system.c elilo/ia32/system.c
|
||||||
|
--- elilo-3.8/ia32/system.c 2008-01-03 22:48:03.000000000 +0100
|
||||||
|
+++ elilo/ia32/system.c 2008-01-14 00:31:57.000000000 +0100
|
||||||
|
@@ -163,10 +163,11 @@
|
||||||
|
EFI_GUID GopProtocol = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
|
||||||
|
EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop_interface;
|
||||||
|
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Gop_info;
|
||||||
|
- EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Gop_mode;
|
||||||
|
- EFI_HANDLE *Gop_handle;
|
||||||
|
+ EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Gop_mode = NULL;
|
||||||
|
+ EFI_HANDLE *Gop_handle = NULL;
|
||||||
|
EFI_STATUS efi_status;
|
||||||
|
- UINTN size, size1;
|
||||||
|
+ UINTN size = 0;
|
||||||
|
+ UINTN size1;
|
||||||
|
UINT8 i;
|
||||||
|
|
||||||
|
efi_status = uefi_call_wrapper(
|
||||||
|
@@ -204,7 +205,7 @@
|
||||||
|
3,
|
||||||
|
*Gop_handle,
|
||||||
|
&GopProtocol,
|
||||||
|
- &Gop_interface);
|
||||||
|
+ (VOID **) &Gop_interface);
|
||||||
|
|
||||||
|
if (EFI_ERROR(efi_status)) {
|
||||||
|
continue;
|
||||||
|
diff -ur elilo-3.8/ia64/fpswa.c elilo/ia64/fpswa.c
|
||||||
|
--- elilo-3.8/ia64/fpswa.c 2003-08-19 18:46:09.000000000 +0200
|
||||||
|
+++ elilo/ia64/fpswa.c 2008-01-12 00:53:33.000000000 +0100
|
||||||
|
@@ -132,7 +132,7 @@
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
UINTN j, count = sizeof(fpswa_filenames)/sizeof(CHAR16 *);
|
||||||
|
- INTN cookie;
|
||||||
|
+ UINTN cookie;
|
||||||
|
CHAR16 devname[FILENAME_MAXLEN];
|
||||||
|
|
||||||
|
if (fpswa_file) {
|
||||||
|
diff -ur elilo-3.8/ia64/gzip.c elilo/ia64/gzip.c
|
||||||
|
--- elilo-3.8/ia64/gzip.c 2005-12-01 22:42:59.000000000 +0100
|
||||||
|
+++ elilo/ia64/gzip.c 2008-01-12 00:53:33.000000000 +0100
|
||||||
|
@@ -161,7 +161,7 @@
|
||||||
|
int
|
||||||
|
fill_inbuf(void)
|
||||||
|
{
|
||||||
|
- INTN expected, nread;
|
||||||
|
+ UINTN expected, nread;
|
||||||
|
EFI_STATUS status;
|
||||||
|
|
||||||
|
expected = nread = INBUFSIZE;
|
||||||
|
@@ -309,7 +309,7 @@
|
||||||
|
* the relevant header information.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
-first_block (const char *buf, long blocksize)
|
||||||
|
+first_block (const unsigned char *buf, long blocksize)
|
||||||
|
{
|
||||||
|
Elf64_Ehdr *elf;
|
||||||
|
Elf64_Phdr *phdrs;
|
||||||
|
@@ -439,7 +439,7 @@
|
||||||
|
if (alloc_kmem((void *)low_addr, pages) == -1) {
|
||||||
|
VOID *new_addr;
|
||||||
|
|
||||||
|
- VERB_PRT(1, (L"%s : AllocatePages(%d, 0x%lx) for kernel failed\n", LD_NAME, pages, low_addr));
|
||||||
|
+ VERB_PRT(1, Print(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"));
|
||||||
|
@@ -464,7 +464,7 @@
|
||||||
|
/* unsigned arithmetic */
|
||||||
|
load_offset = (UINTN) (new_addr - ROUNDDOWN((UINTN) low_addr,256*MB));
|
||||||
|
|
||||||
|
- VERB_PRT(1, (L"low_addr=0x%lx new_addr=0x%lx offset=0x%lx", low_addr, new_addr, load_offset));
|
||||||
|
+ VERB_PRT(1, Print(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
|
||||||
|
@@ -526,7 +526,7 @@
|
||||||
|
static const CHAR8 helicopter[4] = { '|' , '/' , '-' , '\\' };
|
||||||
|
static UINTN heli_count;
|
||||||
|
struct segment *cp;
|
||||||
|
- char *src, *dst;
|
||||||
|
+ unsigned char *src, *dst;
|
||||||
|
long cnt;
|
||||||
|
|
||||||
|
if (!outcnt) return;
|
||||||
|
@@ -565,7 +565,7 @@
|
||||||
|
file_offset += skip;
|
||||||
|
outcnt -= skip;
|
||||||
|
}
|
||||||
|
- dst = (char *)cp->addr + (file_offset - cp->offset);
|
||||||
|
+ dst = (unsigned char *)cp->addr + (file_offset - cp->offset);
|
||||||
|
|
||||||
|
cnt = cp->offset + cp->size - file_offset;
|
||||||
|
|
||||||
|
@@ -582,7 +582,7 @@
|
||||||
|
/* See if we are at the end of this chunk */
|
||||||
|
if (file_offset == cp->offset + cp->size) {
|
||||||
|
if (cp->bss_sz) {
|
||||||
|
- dst = (char *)cp->addr + cp->size;
|
||||||
|
+ dst = (unsigned char *)cp->addr + cp->size;
|
||||||
|
Memset(dst, 0, cp->bss_sz);
|
||||||
|
}
|
||||||
|
nextchunk();
|
||||||
|
diff -ur elilo-3.8/ia64/longjmp.S elilo/ia64/longjmp.S
|
||||||
|
--- elilo-3.8/ia64/longjmp.S 2002-01-13 17:00:08.000000000 +0100
|
||||||
|
+++ elilo/ia64/longjmp.S 2008-01-27 01:42:24.000000000 +0100
|
||||||
|
@@ -159,4 +159,4 @@
|
||||||
|
invala // virt. -> phys. regnum mapping may change
|
||||||
|
mov pr=r24,-1
|
||||||
|
br.ret.dptk.few rp
|
||||||
|
- .endp __longjmp
|
||||||
|
+ .endp longjmp
|
||||||
|
diff -ur elilo-3.8/ia64/plain_loader.c elilo/ia64/plain_loader.c
|
||||||
|
--- elilo-3.8/ia64/plain_loader.c 2005-09-16 18:25:52.000000000 +0200
|
||||||
|
+++ elilo/ia64/plain_loader.c 2008-01-12 00:53:33.000000000 +0100
|
||||||
|
@@ -288,7 +288,7 @@
|
||||||
|
if (alloc_kmem(low_addr, pages) == -1) {
|
||||||
|
VOID *new_addr;
|
||||||
|
|
||||||
|
- VERB_PRT(1, (L"%s : AllocatePages(%d, 0x%lx) for kernel failed\n", LD_NAME, pages, low_addr));
|
||||||
|
+ VERB_PRT(1, Print(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"));
|
||||||
|
diff -ur elilo-3.8/ia64/setjmp.S elilo/ia64/setjmp.S
|
||||||
|
--- elilo-3.8/ia64/setjmp.S 2005-05-10 01:22:04.000000000 +0200
|
||||||
|
+++ elilo/ia64/setjmp.S 2008-01-27 01:42:24.000000000 +0100
|
||||||
|
@@ -81,6 +81,7 @@
|
||||||
|
.proc __sigsetjmp
|
||||||
|
__sigsetjmp:
|
||||||
|
//.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2)
|
||||||
|
+ .body
|
||||||
|
alloc loc1=ar.pfs,2,2,2,0
|
||||||
|
mov r16=ar.unat
|
||||||
|
;;
|
||||||
|
@@ -89,6 +90,7 @@
|
||||||
|
add r3=8,in0
|
||||||
|
;;
|
||||||
|
st8.spill.nta [r2]=sp,16 // r12 (sp)
|
||||||
|
+ ;;
|
||||||
|
st8.spill.nta [r3]=gp,16 // r1 (gp)
|
||||||
|
;;
|
||||||
|
st8.nta [r2]=r16,16 // save caller's unat
|
||||||
|
@@ -96,13 +98,13 @@
|
||||||
|
add r8=0xa0,in0
|
||||||
|
;;
|
||||||
|
st8.spill.nta [r2]=r4,16 // r4
|
||||||
|
+ ;;
|
||||||
|
st8.spill.nta [r3]=r5,16 // r5
|
||||||
|
add r9=0xb0,in0
|
||||||
|
;;
|
||||||
|
stf.spill.nta [r8]=f2,32
|
||||||
|
stf.spill.nta [r9]=f3,32
|
||||||
|
mov loc0=rp
|
||||||
|
- .body
|
||||||
|
;;
|
||||||
|
stf.spill.nta [r8]=f4,32
|
||||||
|
stf.spill.nta [r9]=f5,32
|
||||||
|
@@ -139,6 +141,7 @@
|
||||||
|
stf.spill.nta [r9]=f31
|
||||||
|
|
||||||
|
st8.spill.nta [r2]=r6,16 // r6
|
||||||
|
+ ;;
|
||||||
|
st8.spill.nta [r3]=r7,16 // r7
|
||||||
|
;;
|
||||||
|
mov r23=ar.bsp
|
||||||
|
diff -ur elilo-3.8/ia64/sysdeps.h elilo/ia64/sysdeps.h
|
||||||
|
--- elilo-3.8/ia64/sysdeps.h 2005-12-01 22:42:59.000000000 +0100
|
||||||
|
+++ elilo/ia64/sysdeps.h 2008-01-12 00:53:34.000000000 +0100
|
||||||
|
@@ -86,7 +86,7 @@
|
||||||
|
asm volatile ("mov r28=%1; br.sptk.few %0" :: "b"(kentry),"r"(bp));
|
||||||
|
}
|
||||||
|
|
||||||
|
-static inline const UINT64
|
||||||
|
+static inline UINT64
|
||||||
|
__ia64_swab64 (UINT64 x)
|
||||||
|
{
|
||||||
|
UINT64 result;
|
||||||
|
@@ -95,13 +95,13 @@
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static inline const UINT32
|
||||||
|
+static inline UINT32
|
||||||
|
__ia64_swab32 (UINT32 x)
|
||||||
|
{
|
||||||
|
return __ia64_swab64(x) >> 32;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static inline const UINT16
|
||||||
|
+static inline UINT16
|
||||||
|
__ia64_swab16(UINT16 x)
|
||||||
|
{
|
||||||
|
return __ia64_swab64(x) >> 48;
|
||||||
|
diff -ur elilo-3.8/inflate.c elilo/inflate.c
|
||||||
|
--- elilo-3.8/inflate.c 2005-12-01 22:42:59.000000000 +0100
|
||||||
|
+++ elilo/inflate.c 2008-01-15 02:03:19.000000000 +0100
|
||||||
|
@@ -1094,10 +1094,10 @@
|
||||||
|
error("Input has invalid flags\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
- (ulg)get_byte(); /* Get timestamp */
|
||||||
|
- ((ulg)get_byte()) << 8;
|
||||||
|
- ((ulg)get_byte()) << 16;
|
||||||
|
- ((ulg)get_byte()) << 24;
|
||||||
|
+ (void)get_byte(); /* Get timestamp - 4 bytes */
|
||||||
|
+ (void)get_byte();
|
||||||
|
+ (void)get_byte();
|
||||||
|
+ (void)get_byte();
|
||||||
|
|
||||||
|
(void)get_byte(); /* Ignore extra flags for the moment */
|
||||||
|
(void)get_byte(); /* Ignore OS type for the moment */
|
||||||
|
diff -ur elilo-3.8/util.c elilo/util.c
|
||||||
|
--- elilo-3.8/util.c 2007-07-20 21:47:26.000000000 +0200
|
||||||
|
+++ elilo/util.c 2008-01-12 00:53:33.000000000 +0100
|
||||||
|
@@ -248,7 +248,7 @@
|
||||||
|
INTN
|
||||||
|
read_file(UINTN fd, UINTN total_size, CHAR8 *buffer)
|
||||||
|
{
|
||||||
|
- INTN size, j=0;
|
||||||
|
+ UINTN size, j=0;
|
||||||
|
EFI_STATUS status;
|
||||||
|
CHAR16 helicopter[4] = { L'|' , L'/' , L'-' , L'\\' };
|
||||||
|
INTN ret = ELILO_LOAD_SUCCESS;
|
||||||
|
diff -ur elilo-3.8/x86_64/gzip.c elilo/x86_64/gzip.c
|
||||||
|
--- elilo-3.8/x86_64/gzip.c 2007-07-20 21:47:27.000000000 +0200
|
||||||
|
+++ elilo/x86_64/gzip.c 2008-01-15 02:03:19.000000000 +0100
|
||||||
|
@@ -156,7 +156,7 @@
|
||||||
|
int
|
||||||
|
fill_inbuf(void)
|
||||||
|
{
|
||||||
|
- INTN expected, nread;
|
||||||
|
+ UINTN expected, nread;
|
||||||
|
EFI_STATUS status;
|
||||||
|
|
||||||
|
expected = nread = INBUFSIZE;
|
||||||
|
@@ -280,7 +280,7 @@
|
||||||
|
* the relevant header information.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
-first_block (const char *buf, long blocksize)
|
||||||
|
+first_block (const unsigned char *buf, long blocksize)
|
||||||
|
{
|
||||||
|
Elf64_Ehdr *elf;
|
||||||
|
Elf64_Phdr *phdrs;
|
||||||
|
@@ -433,7 +433,7 @@
|
||||||
|
static const CHAR8 helicopter[4] = { '|' , '/' , '-' , '\\' };
|
||||||
|
static UINTN heli_count;
|
||||||
|
struct segment *cp;
|
||||||
|
- char *src, *dst;
|
||||||
|
+ unsigned char *src, *dst;
|
||||||
|
long cnt;
|
||||||
|
|
||||||
|
if (!outcnt) return;
|
||||||
|
@@ -471,7 +471,7 @@
|
||||||
|
file_offset += skip;
|
||||||
|
outcnt -= skip;
|
||||||
|
}
|
||||||
|
- dst = (char *)cp->addr + (file_offset - cp->offset);
|
||||||
|
+ dst = (unsigned char *)cp->addr + (file_offset - cp->offset);
|
||||||
|
cnt = cp->offset + cp->size - file_offset;
|
||||||
|
if (cnt > outcnt)
|
||||||
|
cnt = outcnt;
|
||||||
|
@@ -485,7 +485,7 @@
|
||||||
|
/* See if we are at the end of this chunk */
|
||||||
|
if (file_offset == cp->offset + cp->size) {
|
||||||
|
if (cp->bss_sz) {
|
||||||
|
- dst = (char *)cp->addr + cp->size;
|
||||||
|
+ dst = (unsigned char *)cp->addr + cp->size;
|
||||||
|
Memset(dst, 0, cp->bss_sz);
|
||||||
|
}
|
||||||
|
nextchunk();
|
||||||
|
diff -ur elilo-3.8/x86_64/sysdeps.h elilo/x86_64/sysdeps.h
|
||||||
|
--- elilo-3.8/x86_64/sysdeps.h 2007-12-19 23:52:22.000000000 +0100
|
||||||
|
+++ elilo/x86_64/sysdeps.h 2008-01-15 02:03:19.000000000 +0100
|
||||||
|
@@ -370,8 +370,8 @@
|
||||||
|
UINT32 kernel_entry;
|
||||||
|
UINT16 kernel_cs;
|
||||||
|
} jumpvector;
|
||||||
|
- UINTN njump;
|
||||||
|
VOID *jump_start;
|
||||||
|
+ uint64_t temp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Disable interrupts.
|
||||||
|
@@ -383,7 +383,8 @@
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (bp->s.initrd_start) {
|
||||||
|
- MEMCPY(INITRD_START, bp->s.initrd_start, bp->s.initrd_size);
|
||||||
|
+ temp = bp->s.initrd_start;
|
||||||
|
+ MEMCPY(INITRD_START, temp , bp->s.initrd_size);
|
||||||
|
bp->s.initrd_start = INITRD_START;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
@@ -434,14 +435,15 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Jump to kernel entry point.
|
||||||
|
+ *
|
||||||
|
+ * Cast is to tell gcc that we know we're going from
|
||||||
|
+ * 64-bit ptr to 32-bit integer.
|
||||||
|
*/
|
||||||
|
- jumpvector.kernel_entry=kentry;
|
||||||
|
+ jumpvector.kernel_entry=(UINT32)((UINT64)kentry);
|
||||||
|
jumpvector.kernel_cs=0x10;
|
||||||
|
- njump = &jumpvector;
|
||||||
|
jump_start = (VOID *)&jumpvector;
|
||||||
|
//asm volatile ( "mov %0, %%rcx" : : "m" (&jumpvector) );
|
||||||
|
asm volatile ( "mov %0, %%rcx" : : "m" (jump_start) );
|
||||||
|
- //asm volatile ( "mov %0, %%rcx" : : "m" (njump) );
|
||||||
|
asm volatile ( "ljmp *(%%rcx)" : :);
|
||||||
|
/* Never come back to here. */
|
||||||
|
}
|
||||||
|
diff -ur elilo-3.8/x86_64/system.c elilo/x86_64/system.c
|
||||||
|
--- elilo-3.8/x86_64/system.c 2008-01-03 22:48:03.000000000 +0100
|
||||||
|
+++ elilo/x86_64/system.c 2008-01-15 02:03:19.000000000 +0100
|
||||||
|
@@ -160,7 +160,7 @@
|
||||||
|
mmap_desc_t md;
|
||||||
|
|
||||||
|
ZeroMem(&md, sizeof md);
|
||||||
|
- md.md = (VOID *)bp->s.efi_mem_map;
|
||||||
|
+ md.md = (VOID *)(UINT64)bp->s.efi_mem_map;
|
||||||
|
free_memmap(&md);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -189,10 +189,11 @@
|
||||||
|
EFI_GUID GopProtocol = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
|
||||||
|
EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop_interface;
|
||||||
|
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Gop_info;
|
||||||
|
- EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Gop_mode;
|
||||||
|
- EFI_HANDLE *Gop_handle;
|
||||||
|
+ EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Gop_mode = NULL;
|
||||||
|
+ EFI_HANDLE *Gop_handle = NULL;
|
||||||
|
EFI_STATUS efi_status;
|
||||||
|
- UINTN size, size1;
|
||||||
|
+ UINTN size = 0;
|
||||||
|
+ UINTN size1;
|
||||||
|
UINT8 i;
|
||||||
|
|
||||||
|
efi_status = uefi_call_wrapper(
|
||||||
|
@@ -554,7 +555,7 @@
|
||||||
|
|
||||||
|
if (initrd->start_addr && initrd->pgcnt) {
|
||||||
|
/* %%TBD - This will probably have to be changed. */
|
||||||
|
- bp->s.initrd_start = (UINT32)initrd->start_addr;
|
||||||
|
+ bp->s.initrd_start = (UINT32)(UINT64)initrd->start_addr;
|
||||||
|
bp->s.initrd_size = (UINT32)(initrd->size);
|
||||||
|
/*
|
||||||
|
* This is the RAMdisk root device for RedHat 2.2.x
|
||||||
|
@@ -598,7 +599,7 @@
|
||||||
|
/*
|
||||||
|
* Kernel entry point.
|
||||||
|
*/
|
||||||
|
- bp->s.kernel_start = (UINT32)kernel_start;
|
||||||
|
+ bp->s.kernel_start = (UINT32)(UINT64)kernel_start;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When changing stuff in the parameter structure compare
|
@ -1,9 +0,0 @@
|
|||||||
diff -purN elilo-3.5-pre2/ia64/longjmp.S elilo/ia64/longjmp.S
|
|
||||||
--- elilo-3.5-pre2/ia64/longjmp.S 2002-01-13 17:00:08.000000000 +0100
|
|
||||||
+++ elilo/ia64/longjmp.S 2005-12-07 14:50:38.833056090 +0100
|
|
||||||
@@ -159,4 +159,4 @@ longjmp:
|
|
||||||
invala // virt. -> phys. regnum mapping may change
|
|
||||||
mov pr=r24,-1
|
|
||||||
br.ret.dptk.few rp
|
|
||||||
- .endp __longjmp
|
|
||||||
+ .endp longjmp
|
|
108
elilo-uEFI-no-alloc_kmem.diff
Normal file
108
elilo-uEFI-no-alloc_kmem.diff
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
--- elilo/x86_64/bzimage.c
|
||||||
|
+++ elilo/x86_64/bzimage.c
|
||||||
|
@@ -160,7 +160,9 @@
|
||||||
|
|
||||||
|
if (alloc_kmem(kernel_start, EFI_SIZE_TO_PAGES(kernel_size))) {
|
||||||
|
ERR_PRT((L"Could not allocate kernel memory."));
|
||||||
|
- return -1;
|
||||||
|
+ if (x86_64_allow_alloc_fail() != 1) {
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
} else {
|
||||||
|
VERB_PRT(3, Print(L"kernel_start: 0x%x kernel_size: %d\n",
|
||||||
|
kernel_start, kernel_size));
|
||||||
|
@@ -169,7 +171,7 @@
|
||||||
|
* Now read the rest of the kernel image into memory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
- DBG_PRT((L"reading kernel image...\n"));
|
||||||
|
+ Print(L"Loading kernel %s... ", kname);
|
||||||
|
|
||||||
|
size = kernel_size;
|
||||||
|
efi_status = fops_read(fd, kernel_start, &size);
|
||||||
|
@@ -181,6 +183,8 @@
|
||||||
|
fops_close(fd);
|
||||||
|
free_kmem();
|
||||||
|
return -1;
|
||||||
|
+ } else {
|
||||||
|
+ Print(L" done\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG_PRT((L"kernel image read: %d bytes, %d Kbytes\n", size, size / 1024));
|
||||||
|
--- elilo/x86_64/config.c
|
||||||
|
+++ elilo/x86_64/config.c
|
||||||
|
@@ -33,15 +33,24 @@
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINTN legacy_free_boot;
|
||||||
|
+ UINTN allow_alloc_fail;
|
||||||
|
} x86_64_global_config_t;
|
||||||
|
|
||||||
|
|
||||||
|
+#define x86_64_opt_offsetof(option) (&((sys_img_options_t *)(0x0))->option)
|
||||||
|
+
|
||||||
|
static x86_64_global_config_t x86_64_gconf;
|
||||||
|
|
||||||
|
static config_option_t sysdeps_global_options[]={
|
||||||
|
- {OPT_BOOL, OPT_GLOBAL, L"legacy-free", NULL, NULL, &x86_64_gconf.legacy_free_boot}
|
||||||
|
+ {OPT_BOOL, OPT_GLOBAL, L"legacy-free", NULL, NULL, &x86_64_gconf.legacy_free_boot},
|
||||||
|
+ {OPT_BOOL, OPT_GLOBAL, L"skid-alloc", NULL, NULL, &x86_64_gconf.allow_alloc_fail},
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static config_option_t sysdeps_image_options[]={
|
||||||
|
+ {OPT_BOOL, OPT_IMAGE_SYS, L"skid-alloc", NULL, NULL, x86_64_opt_offsetof(allow_alloc_fail)},
|
||||||
|
};
|
||||||
|
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* X86_64 operations that need to be done only once and just before
|
||||||
|
* entering the main loop of the loader
|
||||||
|
@@ -82,6 +91,13 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
INTN
|
||||||
|
+x86_64_allow_alloc_fail(VOID)
|
||||||
|
+{
|
||||||
|
+ return x86_64_gconf.allow_alloc_fail == TRUE
|
||||||
|
+ || (elilo_opt.sys_img_opts && elilo_opt.sys_img_opts->allow_alloc_fail ==TRUE) ? 1 : 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+INTN
|
||||||
|
sysdeps_register_options(VOID)
|
||||||
|
{
|
||||||
|
INTN ret;
|
||||||
|
@@ -89,14 +105,11 @@
|
||||||
|
ret = register_config_options(sysdeps_global_options,
|
||||||
|
sizeof(sysdeps_global_options)/sizeof(config_option_t),
|
||||||
|
OPTIONS_GROUP_GLOBAL);
|
||||||
|
-#if 0
|
||||||
|
- /* no per image options yet */
|
||||||
|
if (ret == -1 ) return ret;
|
||||||
|
|
||||||
|
ret = register_config_options(sysdeps_image_options,
|
||||||
|
sizeof(sysdeps_image_options)/sizeof(config_option_t),
|
||||||
|
OPTIONS_GROUP_IMAGE);
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
--- elilo/x86_64/sysdeps.h
|
||||||
|
+++ elilo/x86_64/sysdeps.h
|
||||||
|
@@ -357,6 +357,7 @@
|
||||||
|
extern UINTN rmswitch_size;
|
||||||
|
|
||||||
|
extern INTN x86_64_use_legacy_free_boot();
|
||||||
|
+extern INTN x86_64_allow_alloc_fail();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* How to jump to kernel code
|
||||||
|
@@ -449,7 +450,8 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct sys_img_options {
|
||||||
|
- UINT8 nothing_yet;
|
||||||
|
+ UINT8 dummy; /* forces non-zero offset for first field */
|
||||||
|
+ UINT8 allow_alloc_fail; /* ignore failure of alloc_kmem */
|
||||||
|
} sys_img_options_t;
|
||||||
|
|
||||||
|
#endif /* __ELILO_SYSDEPS_X86_64_H__ */
|
@ -1,3 +1,15 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Nov 21 15:56:50 CET 2008 - rw@suse.de
|
||||||
|
|
||||||
|
- elilo.efi
|
||||||
|
* Significant code cleanup from CVS. (bnc#443565)
|
||||||
|
* First attempt to work around firmware problem. (bnc#437486)
|
||||||
|
- elilo.pl
|
||||||
|
* Improve removal of obsolete files. (bnc#398416)
|
||||||
|
- eliloalt
|
||||||
|
* Support sysfs interface. (bnc#440489)
|
||||||
|
* Provide man page. (bnc#440197)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Oct 27 18:16:02 CET 2008 - rw@suse.de
|
Mon Oct 27 18:16:02 CET 2008 - rw@suse.de
|
||||||
|
|
||||||
|
30
elilo.pl
30
elilo.pl
@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
# $Id: elilo.pl,v 0.16 2008/10/27 17:15:29 rw Exp $
|
# $Id: elilo.pl,v 0.17 2008/11/12 15:57:58 rw Exp $
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
my $C = $0; $C =~ s{^.*/}{};
|
my $C = $0; $C =~ s{^.*/}{};
|
||||||
@ -15,10 +15,10 @@ my $Dlib = "$dbg$LibD/efi";
|
|||||||
my $Fconf = "elilo.conf";
|
my $Fconf = "elilo.conf";
|
||||||
my $Sconf = "$dbg/etc/" . $Fconf;
|
my $Sconf = "$dbg/etc/" . $Fconf;
|
||||||
|
|
||||||
my $Reserved = qr(^(efi-mountpoint|vendor-directory|elilo-origin))o;
|
my $Reserved = qr(^(efi-mountpoint|vendor-directory|elilo-origin|precious))o;
|
||||||
my %Sconf = ();
|
my %Sconf = ();
|
||||||
|
|
||||||
my $keep = 0;
|
my $keep = -1;
|
||||||
my $test = 0;
|
my $test = 0;
|
||||||
my $verbose = 0;
|
my $verbose = 0;
|
||||||
my $warn = 0;
|
my $warn = 0;
|
||||||
@ -39,7 +39,7 @@ $| = 1;
|
|||||||
$[ = 0;
|
$[ = 0;
|
||||||
|
|
||||||
sub Version() {
|
sub Version() {
|
||||||
my $v = q($Revision: 0.16 $ );
|
my $v = q($Revision: 0.17 $ );
|
||||||
$v =~ s/^\$ Rev.*:\ ([0-9.]+)\ \$\ /$1/x;
|
$v =~ s/^\$ Rev.*:\ ([0-9.]+)\ \$\ /$1/x;
|
||||||
$v .= " (part of elilo-$Edition)" if ( $Edition ne "\@EDITION\@" );
|
$v .= " (part of elilo-$Edition)" if ( $Edition ne "\@EDITION\@" );
|
||||||
print "$C version $v\n";
|
print "$C version $v\n";
|
||||||
@ -62,12 +62,14 @@ sub Parse ($) {
|
|||||||
my( $f) = @_;
|
my( $f) = @_;
|
||||||
my %r = ();
|
my %r = ();
|
||||||
|
|
||||||
|
Info( 3, "### Parse '$f'\n");
|
||||||
open( IN, "< $f") || return( %r );
|
open( IN, "< $f") || return( %r );
|
||||||
# fixme: add failure-detection
|
# fixme: add failure-detection
|
||||||
while ( <IN> ) {
|
while ( <IN> ) {
|
||||||
chomp;
|
chomp;
|
||||||
next unless ( m/$Reserved\s*\=\s*(.+)?\s*$/xo );
|
next unless ( m/$Reserved\s*(?:\=\s*(.+))?\s*$/xo );
|
||||||
$r{$1} = $2;
|
$r{$1} = (defined($2)) ? $2 : "true";
|
||||||
|
Info( 3, ">>> $1 = '$r{$1}'\n");
|
||||||
}
|
}
|
||||||
close( IN);
|
close( IN);
|
||||||
return( %r );
|
return( %r );
|
||||||
@ -232,17 +234,16 @@ sub System($@) {
|
|||||||
|
|
||||||
sub Purge($) {
|
sub Purge($) {
|
||||||
my( $d) = @_;
|
my( $d) = @_;
|
||||||
if ( $keep ) {
|
if ( $keep > 0) {
|
||||||
Info( 1, "## skip removal of old files from '$d'\n");
|
Info( 1, "## skip removal of old files from '$d'\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
Info( 1, "## remove old files from '$d'\n");
|
Info( 1, "## remove old files from '$d'\n");
|
||||||
my @F = glob( "$d/*");
|
my @F = glob( "$d/*");
|
||||||
foreach my $f ( @F ) {
|
foreach my $f ( @F ) {
|
||||||
next if ( $f =~ m{.*/elilo.(conf|efi)$} );
|
next unless ( $f =~ m{.*/((vm|)linu(x|z)|initrd)-\S+$} );
|
||||||
Info( 1, "> rm $f\n");
|
Info( 1, "> rm $f\n");
|
||||||
next if ($test);
|
unlink( $f) unless ($test);
|
||||||
unlink( $f);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -335,12 +336,15 @@ sub isMP($) {
|
|||||||
|
|
||||||
pod2usage(2) unless ( GetOptions( \%Opt,
|
pod2usage(2) unless ( GetOptions( \%Opt,
|
||||||
'help|h', 'man|m', 'version|V', 'verbose|v+',
|
'help|h', 'man|m', 'version|V', 'verbose|v+',
|
||||||
'test|t', 'keep|k') && ! $Opt{'help'} );
|
'test|t', 'keep|k', 'purge|K') &&
|
||||||
|
( ! $Opt{'purge'} || ! $Opt{'keep'} ) &&
|
||||||
|
! $Opt{'help'} );
|
||||||
|
|
||||||
Version() if ( $Opt{'version'} );
|
Version() if ( $Opt{'version'} );
|
||||||
pod2usage(-exitstatus => 0, -verbose => 2) if ( $Opt{'man'} );
|
pod2usage(-exitstatus => 0, -verbose => 2) if ( $Opt{'man'} );
|
||||||
pod2usage(1) if ( $Opt{'help'} );
|
pod2usage(1) if ( $Opt{'help'} );
|
||||||
$test = 1 if ( $Opt{'test'} );
|
$test = 1 if ( $Opt{'test'} );
|
||||||
|
$keep = 0 if ( $Opt{'purge'} );
|
||||||
$keep = 1 if ( $Opt{'keep'} );
|
$keep = 1 if ( $Opt{'keep'} );
|
||||||
$verbose += $Opt{'verbose'} if ( $Opt{'verbose'} );
|
$verbose += $Opt{'verbose'} if ( $Opt{'verbose'} );
|
||||||
}
|
}
|
||||||
@ -380,6 +384,10 @@ if ( exists( $Sconf{"vendor-directory"}) ) {
|
|||||||
Info( 1, "## Don't forget: '$VD != SuSE'--NVRAM (efibootmgr) issue!\n")
|
Info( 1, "## Don't forget: '$VD != SuSE'--NVRAM (efibootmgr) issue!\n")
|
||||||
unless ( $VD eq "SuSE" );
|
unless ( $VD eq "SuSE" );
|
||||||
}
|
}
|
||||||
|
if ( exists( $Sconf{"precious"}) && $keep < 0 ) {
|
||||||
|
$keep = 1;
|
||||||
|
}
|
||||||
|
|
||||||
$D = $MP . "/efi/" . $VD;
|
$D = $MP . "/efi/" . $VD;
|
||||||
Info( 1, "## Using '$D'...\n");
|
Info( 1, "## Using '$D'...\n");
|
||||||
System( 2, "mkdir", "-p", $D) unless ( -d $D );
|
System( 2, "mkdir", "-p", $D) unless ( -d $D );
|
||||||
|
32
elilo.spec
32
elilo.spec
@ -21,7 +21,7 @@
|
|||||||
Name: elilo
|
Name: elilo
|
||||||
Summary: EFI Linux Loader
|
Summary: EFI Linux Loader
|
||||||
Version: 3.8
|
Version: 3.8
|
||||||
Release: 23
|
Release: 24
|
||||||
ExclusiveArch: ia64 %ix86 x86_64
|
ExclusiveArch: ia64 %ix86 x86_64
|
||||||
Group: System/Boot
|
Group: System/Boot
|
||||||
AutoReqProv: on
|
AutoReqProv: on
|
||||||
@ -30,13 +30,16 @@ License: GPL v2 or later
|
|||||||
Url: http://elilo.sourceforge.net/
|
Url: http://elilo.sourceforge.net/
|
||||||
Source: http://dl.sourceforge.net/elilo/elilo-3.8.tar.gz
|
Source: http://dl.sourceforge.net/elilo/elilo-3.8.tar.gz
|
||||||
Source1: elilo.pl
|
Source1: elilo.pl
|
||||||
Source2: rpmlintrc
|
Source2: eliloalt.debian.man8
|
||||||
Patch0: elilo-asm.diff
|
Source3: rpmlintrc
|
||||||
|
Patch0: elilo-3.8-cvs20080127.diff
|
||||||
Patch1: elilo-MAC.diff
|
Patch1: elilo-MAC.diff
|
||||||
Patch2: elilo-spelling.diff
|
Patch2: elilo-spelling.diff
|
||||||
Patch3: elilo-longer-commandline.diff
|
Patch3: elilo-longer-commandline.diff
|
||||||
Patch4: elilo-fix-possible-overflow.diff
|
Patch4: elilo-fix-possible-overflow.diff
|
||||||
Patch5: elilo-avoid-tab.diff
|
Patch5: elilo-avoid-tab.diff
|
||||||
|
Patch6: eliloalt-sysfs.diff
|
||||||
|
Patch7: elilo-uEFI-no-alloc_kmem.diff
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
BuildRequires: gnu-efi >= 3.0e
|
BuildRequires: gnu-efi >= 3.0e
|
||||||
|
|
||||||
@ -60,6 +63,8 @@ Authors:
|
|||||||
%patch3 -p1
|
%patch3 -p1
|
||||||
%patch4 -p1
|
%patch4 -p1
|
||||||
%patch5 -p1
|
%patch5 -p1
|
||||||
|
%patch6 -p1
|
||||||
|
%patch7 -p1
|
||||||
perl -pe 's{\@EDITION\@}{%{version}-%{release}};
|
perl -pe 's{\@EDITION\@}{%{version}-%{release}};
|
||||||
s{\@LIBEXECDIR\@}{%{_libexecdir}};
|
s{\@LIBEXECDIR\@}{%{_libexecdir}};
|
||||||
s{\@ARCH\@}{%{_target_cpu}};
|
s{\@ARCH\@}{%{_target_cpu}};
|
||||||
@ -67,6 +72,7 @@ perl -pe 's{\@EDITION\@}{%{version}-%{release}};
|
|||||||
perl -pi -e 's{/usr/lib}{%{_libexecdir}}' Make.defaults
|
perl -pi -e 's{/usr/lib}{%{_libexecdir}}' Make.defaults
|
||||||
chmod 555 elilo.pl && touch -r %{SOURCE1} elilo.pl
|
chmod 555 elilo.pl && touch -r %{SOURCE1} elilo.pl
|
||||||
! fgrep '%%{version}-%%{release}' elilo.pl
|
! fgrep '%%{version}-%%{release}' elilo.pl
|
||||||
|
cp --preserve=time %{SOURCE2} eliloalt.8
|
||||||
|
|
||||||
%build
|
%build
|
||||||
make OPTIMFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -fno-stack-protector"
|
make OPTIMFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -fno-stack-protector"
|
||||||
@ -80,9 +86,10 @@ install -m 444 elilo.efi $RPM_BUILD_ROOT%{_libexecdir}/efi
|
|||||||
install tools/eliloalt $RPM_BUILD_ROOT/sbin
|
install tools/eliloalt $RPM_BUILD_ROOT/sbin
|
||||||
install -p -m 555 elilo.pl $RPM_BUILD_ROOT/sbin/elilo
|
install -p -m 555 elilo.pl $RPM_BUILD_ROOT/sbin/elilo
|
||||||
%if 0
|
%if 0
|
||||||
install -D -p elilo.5 $RPM_BUILD_ROOT/usr/share/man/man5/elilo.conf.5
|
install -D -p -m 644 elilo.5 $RPM_BUILD_ROOT/usr/share/man/man5/elilo.conf.5
|
||||||
install -D -p elilo.8 $RPM_BUILD_ROOT/usr/share/man/man8/elilo.8
|
|
||||||
%endif
|
%endif
|
||||||
|
install -D -p -m 644 elilo.8 $RPM_BUILD_ROOT/usr/share/man/man8/elilo.8
|
||||||
|
install -D -p -m 644 eliloalt.8 $RPM_BUILD_ROOT/usr/share/man/man8/eliloalt.8
|
||||||
|
|
||||||
%clean
|
%clean
|
||||||
rm -fr $RPM_BUILD_ROOT
|
rm -fr $RPM_BUILD_ROOT
|
||||||
@ -99,10 +106,19 @@ echo "Please run /sbin/elilo!"
|
|||||||
/sbin/eliloalt
|
/sbin/eliloalt
|
||||||
%if 0
|
%if 0
|
||||||
/usr/share/man/man5/*
|
/usr/share/man/man5/*
|
||||||
/usr/share/man/man8/*
|
|
||||||
%endif
|
%endif
|
||||||
|
/usr/share/man/man8/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Nov 21 2008 rw@suse.de
|
||||||
|
- elilo.efi
|
||||||
|
* Significant code cleanup from CVS. (bnc#443565)
|
||||||
|
* First attempt to work around firmware problem. (bnc#437486)
|
||||||
|
- elilo.pl
|
||||||
|
* Improve removal of obsolete files. (bnc#398416)
|
||||||
|
- eliloalt
|
||||||
|
* Support sysfs interface. (bnc#440489)
|
||||||
|
* Provide man page. (bnc#440197)
|
||||||
* Mon Oct 27 2008 rw@suse.de
|
* Mon Oct 27 2008 rw@suse.de
|
||||||
- elilo.pl
|
- elilo.pl
|
||||||
* Mask 'relocatable' (unless supported). (bnc#438276)
|
* Mask 'relocatable' (unless supported). (bnc#438276)
|
||||||
@ -121,10 +137,10 @@ echo "Please run /sbin/elilo!"
|
|||||||
* Thu Feb 28 2008 ro@suse.de
|
* Thu Feb 28 2008 ro@suse.de
|
||||||
- elilo.spec
|
- elilo.spec
|
||||||
* No strip for elilo.efi during install (unknown binary format).
|
* No strip for elilo.efi during install (unknown binary format).
|
||||||
* Sun May 27 2007 schwab@suse.de
|
* Sat May 26 2007 schwab@suse.de
|
||||||
- elilo.spec
|
- elilo.spec
|
||||||
* Revert last change.
|
* Revert last change.
|
||||||
* Sun May 27 2007 ro@suse.de
|
* Sat May 26 2007 ro@suse.de
|
||||||
- elilo.spec
|
- elilo.spec
|
||||||
* Added gnu-efi-devel to buildreq.
|
* Added gnu-efi-devel to buildreq.
|
||||||
* Wed May 09 2007 rw@suse.de
|
* Wed May 09 2007 rw@suse.de
|
||||||
|
109
eliloalt-sysfs.diff
Normal file
109
eliloalt-sysfs.diff
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
--- a/tools/eliloalt.c
|
||||||
|
+++ b/tools/eliloalt.c
|
||||||
|
@@ -47,8 +47,10 @@
|
||||||
|
#define ELILOALT_VERSION "0.02"
|
||||||
|
|
||||||
|
#define ELILO_ALT_NAME "EliloAlt"
|
||||||
|
-#define EFIVAR_DIR "/proc/efi/vars"
|
||||||
|
+#define EFIVAR_DIR "/sys/firmware/efi/vars"
|
||||||
|
+#define OFIVAR_DIR "/proc/efi/vars"
|
||||||
|
#define ELILO_ALTVAR EFIVAR_DIR"/"ELILO_ALT_NAME"-00000000-0000-0000-0000-000000000000"
|
||||||
|
+#define OLILO_ALTVAR OFIVAR_DIR"/"ELILO_ALT_NAME"-00000000-0000-0000-0000-000000000000"
|
||||||
|
|
||||||
|
#define EFI_VARIABLE_NON_VOLATILE 0x0000000000000001
|
||||||
|
#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002
|
||||||
|
@@ -80,7 +82,9 @@
|
||||||
|
uint32_t attributes;
|
||||||
|
} __attribute__((packed)) efi_variable_t;
|
||||||
|
|
||||||
|
+static char *efivar_dir = EFIVAR_DIR;
|
||||||
|
static char *elilo_alt_name = ELILO_ALT_NAME;
|
||||||
|
+static char *elilo_altvar = ELILO_ALTVAR;
|
||||||
|
|
||||||
|
static struct option cmd_options[]={
|
||||||
|
{ "version", 0, 0, 1},
|
||||||
|
@@ -129,9 +133,15 @@
|
||||||
|
if (getuid() != 0) {
|
||||||
|
fatal_error("This program must be run as root\n");
|
||||||
|
}
|
||||||
|
- efi_vars = opendir(EFIVAR_DIR);
|
||||||
|
+ efi_vars = opendir(efivar_dir);
|
||||||
|
if (efi_vars == NULL) {
|
||||||
|
- fatal_error("Cannot access %s\n", EFIVAR_DIR);
|
||||||
|
+ efivar_dir = OFIVAR_DIR;
|
||||||
|
+ elilo_altvar = OLILO_ALTVAR;
|
||||||
|
+ efi_vars = opendir(efivar_dir);
|
||||||
|
+ }
|
||||||
|
+ if (efi_vars == NULL) {
|
||||||
|
+ fatal_error("Can access neither %s nor %s\n",
|
||||||
|
+ EFIVAR_DIR, efivar_dir);
|
||||||
|
}
|
||||||
|
if (!find_entry) {
|
||||||
|
closedir(efi_vars);
|
||||||
|
@@ -143,9 +153,10 @@
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (entry == NULL) {
|
||||||
|
- fatal_error("Cannot find entry in %s\n", EFIVAR_DIR);
|
||||||
|
+ fatal_error("Cannot find entry in %s\n", efivar_dir);
|
||||||
|
}
|
||||||
|
- sprintf(name, "%s/%s", EFIVAR_DIR, entry->d_name);
|
||||||
|
+ snprintf(name, 1023, "%s/%s", efivar_dir, entry->d_name);
|
||||||
|
+ name[1023] = 0;
|
||||||
|
closedir(efi_vars);
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
@@ -158,7 +169,7 @@
|
||||||
|
|
||||||
|
check_proc_efi(0);
|
||||||
|
|
||||||
|
- fd = open(ELILO_ALTVAR, O_WRONLY);
|
||||||
|
+ fd = open(elilo_altvar, O_WRONLY);
|
||||||
|
if (fd == -1) {
|
||||||
|
fatal_error("variable not defined\n");
|
||||||
|
}
|
||||||
|
@@ -176,7 +187,7 @@
|
||||||
|
|
||||||
|
r = write(fd, &var, sizeof(var));
|
||||||
|
if (r != sizeof(var)) {
|
||||||
|
- fatal_error("Variable %s defined but invalid content\n", ELILO_ALTVAR);
|
||||||
|
+ fatal_error("Variable %s defined but invalid content\n", elilo_altvar);
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
@@ -191,7 +202,7 @@
|
||||||
|
|
||||||
|
check_proc_efi(0);
|
||||||
|
|
||||||
|
- fd = open(ELILO_ALTVAR, O_RDONLY);
|
||||||
|
+ fd = open(elilo_altvar, O_RDONLY);
|
||||||
|
if (fd == -1) {
|
||||||
|
fatal_error("variable not defined\n");
|
||||||
|
}
|
||||||
|
@@ -200,7 +211,7 @@
|
||||||
|
|
||||||
|
r = read(fd, &var, sizeof(var));
|
||||||
|
if (r != sizeof(var)) {
|
||||||
|
- fatal_error("Variable %s defined but invalid content\n", ELILO_ALTVAR);
|
||||||
|
+ fatal_error("Variable %s defined but invalid content\n", elilo_altvar);
|
||||||
|
}
|
||||||
|
printf("EliloAlt=\"");
|
||||||
|
for(i=0; i < var.datasize; i+=1){
|
||||||
|
@@ -231,7 +242,7 @@
|
||||||
|
|
||||||
|
fd = open(name, O_WRONLY);
|
||||||
|
if (fd == -1) {
|
||||||
|
- fatal_error("can't open %s: %s\n", ELILO_ALTVAR, strerror(errno));
|
||||||
|
+ fatal_error("can't open %s: %s\n", elilo_altvar, strerror(errno));
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(&var, 0, sizeof(var));
|
||||||
|
@@ -256,7 +267,7 @@
|
||||||
|
|
||||||
|
r = write(fd, &var, sizeof(var));
|
||||||
|
if (r != sizeof(var)) {
|
||||||
|
- fatal_error("Variable %s defined but invalid content %d\n", ELILO_ALTVAR, r);
|
||||||
|
+ fatal_error("Variable %s defined but invalid content %d\n", elilo_altvar, r);
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
|
|
20
eliloalt.debian.man8
Normal file
20
eliloalt.debian.man8
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
.TH ELILOALT 8 "18 Mar 2002"
|
||||||
|
.SH NAME
|
||||||
|
eliloalt \- manipulate elilo alternate
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B eliloalt
|
||||||
|
.RI [ options ]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The
|
||||||
|
.B eliloalt
|
||||||
|
command makes it possible to coerce elilo to boot an alternate
|
||||||
|
kernel configuration one time only, as when engaging in kernel development or
|
||||||
|
debugging.
|
||||||
|
.sp
|
||||||
|
.SH SEE ALSO
|
||||||
|
Additional information about
|
||||||
|
.B eliloalt
|
||||||
|
is available in the /usr/share/doc/packages/elilo directory.
|
||||||
|
.SH AUTHOR
|
||||||
|
This manual page was written by Bdale Garbee <bdale@gag.com>
|
||||||
|
for the Debian GNU/Linux system (but may be used by others).
|
Loading…
Reference in New Issue
Block a user