92f5c0435e
Apply a patch (patch-b*) to xen-3.1.0 to fix the ELF loader so that the symbol table is properly loaded for the NetBSD dom0 kernel. This is from the Xen repository, based on a patch inistally submitted by Christoph Egger to Xen (thanks !). Should fix PR port-xen/36671. While there also provide a debug Xen kernel, built with debug=1. Bump PKGREVISION.
112 lines
4.2 KiB
Text
112 lines
4.2 KiB
Text
$NetBSD: patch-bd,v 1.1 2007/08/17 17:26:05 bouyer Exp $
|
|
|
|
--- xen/include/public/libelf.h.orig 2007-05-18 16:45:21.000000000 +0200
|
|
+++ xen/include/public/libelf.h 2007-08-16 21:43:18.000000000 +0200
|
|
@@ -69,6 +69,9 @@
|
|
uint64_t pend;
|
|
uint64_t reloc_offset;
|
|
|
|
+ uint64_t bsd_symtab_pstart;
|
|
+ uint64_t bsd_symtab_pend;
|
|
+
|
|
#ifndef __XEN__
|
|
/* misc */
|
|
FILE *log;
|
|
@@ -91,33 +94,32 @@
|
|
#define elf_lsb(elf) (ELFDATA2LSB == (elf)->data)
|
|
#define elf_swap(elf) (NATIVE_ELFDATA != (elf)->data)
|
|
|
|
-#define elf_uval(elf, str, elem) \
|
|
- ((ELFCLASS64 == (elf)->class) \
|
|
- ? elf_access_unsigned((elf), (str), \
|
|
- offsetof(typeof(*(str)),e64.elem), \
|
|
- sizeof((str)->e64.elem)) \
|
|
- : elf_access_unsigned((elf), (str), \
|
|
- offsetof(typeof(*(str)),e32.elem), \
|
|
- sizeof((str)->e32.elem)))
|
|
-
|
|
-#define elf_sval(elf, str, elem) \
|
|
- ((ELFCLASS64 == (elf)->class) \
|
|
- ? elf_access_signed((elf), (str), \
|
|
- offsetof(typeof(*(str)),e64.elem), \
|
|
- sizeof((str)->e64.elem)) \
|
|
- : elf_access_signed((elf), (str), \
|
|
- offsetof(typeof(*(str)),e32.elem), \
|
|
- sizeof((str)->e32.elem)))
|
|
-
|
|
-#define elf_size(elf, str) \
|
|
- ((ELFCLASS64 == (elf)->class) \
|
|
- ? sizeof((str)->e64) \
|
|
- : sizeof((str)->e32))
|
|
+#define elf_uval(elf, str, elem) \
|
|
+ ((ELFCLASS64 == (elf)->class) \
|
|
+ ? elf_access_unsigned((elf), (str), \
|
|
+ offsetof(typeof(*(str)),e64.elem), \
|
|
+ sizeof((str)->e64.elem)) \
|
|
+ : elf_access_unsigned((elf), (str), \
|
|
+ offsetof(typeof(*(str)),e32.elem), \
|
|
+ sizeof((str)->e32.elem)))
|
|
+
|
|
+#define elf_sval(elf, str, elem) \
|
|
+ ((ELFCLASS64 == (elf)->class) \
|
|
+ ? elf_access_signed((elf), (str), \
|
|
+ offsetof(typeof(*(str)),e64.elem), \
|
|
+ sizeof((str)->e64.elem)) \
|
|
+ : elf_access_signed((elf), (str), \
|
|
+ offsetof(typeof(*(str)),e32.elem), \
|
|
+ sizeof((str)->e32.elem)))
|
|
+
|
|
+#define elf_size(elf, str) \
|
|
+ ((ELFCLASS64 == (elf)->class) \
|
|
+ ? sizeof((str)->e64) : sizeof((str)->e32))
|
|
|
|
uint64_t elf_access_unsigned(struct elf_binary *elf, const void *ptr,
|
|
- uint64_t offset, size_t size);
|
|
+ uint64_t offset, size_t size);
|
|
int64_t elf_access_signed(struct elf_binary *elf, const void *ptr,
|
|
- uint64_t offset, size_t size);
|
|
+ uint64_t offset, size_t size);
|
|
|
|
uint64_t elf_round_up(struct elf_binary *elf, uint64_t addr);
|
|
|
|
@@ -165,6 +167,8 @@
|
|
void *elf_get_ptr(struct elf_binary *elf, unsigned long addr);
|
|
uint64_t elf_lookup_addr(struct elf_binary *elf, const char *symbol);
|
|
|
|
+void elf_parse_bsdsyms(struct elf_binary *elf, uint64_t pstart); /* private */
|
|
+
|
|
/* ------------------------------------------------------------------------ */
|
|
/* xc_libelf_relocate.c */
|
|
|
|
@@ -185,8 +189,8 @@
|
|
enum xen_elfnote_type type;
|
|
const char *name;
|
|
union {
|
|
- const char *str;
|
|
- uint64_t num;
|
|
+ const char *str;
|
|
+ uint64_t num;
|
|
} data;
|
|
};
|
|
|
|
@@ -228,14 +232,14 @@
|
|
}
|
|
|
|
int elf_xen_parse_features(const char *features,
|
|
- uint32_t *supported,
|
|
- uint32_t *required);
|
|
+ uint32_t *supported,
|
|
+ uint32_t *required);
|
|
int elf_xen_parse_note(struct elf_binary *elf,
|
|
- struct elf_dom_parms *parms,
|
|
- const elf_note *note);
|
|
+ struct elf_dom_parms *parms,
|
|
+ const elf_note *note);
|
|
int elf_xen_parse_guest_info(struct elf_binary *elf,
|
|
- struct elf_dom_parms *parms);
|
|
+ struct elf_dom_parms *parms);
|
|
int elf_xen_parse(struct elf_binary *elf,
|
|
- struct elf_dom_parms *parms);
|
|
+ struct elf_dom_parms *parms);
|
|
|
|
#endif /* __XC_LIBELF__ */
|