1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
Index: elk-3.99.8/src/stab-elf.c
===================================================================
--- elk-3.99.8.orig/src/stab-elf.c
+++ elk-3.99.8/src/stab-elf.c
@@ -39,6 +39,24 @@
#include "kernel.h"
+#if __x86_64__ || __ppc64__
+# define ElfXX_Ehdr Elf64_Ehdr
+# define ElfXX_Shdr Elf64_Shdr
+# define ElfXX_Sym Elf64_Sym
+# define elfXX_getehdr elf64_getehdr
+# define elfXX_getshdr elf64_getshdr
+# define ELFXX_ST_TYPE ELF64_ST_TYPE
+# define ELFXX_ST_BIND ELF64_ST_BIND
+#else
+# define ElfXX_Ehdr Elf32_Ehdr
+# define ElfXX_Shdr Elf32_Shdr
+# define ElfXX_Sym Elf32_Sym
+# define elfXX_getehdr elf32_getehdr
+# define elfXX_getshdr elf32_getshdr
+# define ELFXX_ST_TYPE ELF32_ST_TYPE
+# define ELFXX_ST_BIND ELF32_ST_BIND
+#endif
+
extern void Free_Symbols (SYMTAB *);
SYMTAB *
@@ -49,8 +67,8 @@ Snarf_Symbols (int lf)
Elf *elf_ptr;
Elf_Scn *elf_scn_ptr = NULL, *symtab_scn_ptr = NULL;
Elf_Data *elf_data_ptr = NULL;
- Elf32_Ehdr *elf_ehdr_ptr = NULL;
- Elf32_Shdr *elf_shdr_ptr = NULL,
+ ElfXX_Ehdr *elf_ehdr_ptr = NULL;
+ ElfXX_Shdr *elf_shdr_ptr = NULL,
*symtab_ptr = NULL;
size_t elf_str_index = 0, shstrndx;
char *section_name;
@@ -64,13 +82,13 @@ Snarf_Symbols (int lf)
* get the elf header, so we'll know where to look for the section
* names.
*/
- if ((elf_ehdr_ptr = elf32_getehdr (elf_ptr)) == NULL) {
+ if ((elf_ehdr_ptr = elfXX_getehdr (elf_ptr)) == NULL) {
Primitive_Error ("no elf header in a.out file");
}
shstrndx = elf_ehdr_ptr->e_shstrndx;
/* look for the symbol and string tables */
while ((elf_scn_ptr = elf_nextscn (elf_ptr, elf_scn_ptr))) {
- if ((elf_shdr_ptr = elf32_getshdr (elf_scn_ptr)) == NULL)
+ if ((elf_shdr_ptr = elfXX_getshdr (elf_scn_ptr)) == NULL)
Primitive_Error ("can't get section header in a.out file");
if (elf_shdr_ptr->sh_type == SHT_STRTAB) {
/*
@@ -101,8 +119,8 @@ Snarf_Symbols (int lf)
while ((elf_data_ptr = elf_getdata (symtab_scn_ptr, elf_data_ptr))) {
char *name = NULL;
unsigned int symbol_count;
- Elf32_Sym *symbol_ptr = elf_data_ptr->d_buf;
- Elf32_Sym *current_symbol;
+ ElfXX_Sym *symbol_ptr = elf_data_ptr->d_buf;
+ ElfXX_Sym *current_symbol;
tab = (SYMTAB *)Safe_Malloc (sizeof (SYMTAB));
tab->first = 0;
@@ -115,8 +133,8 @@ Snarf_Symbols (int lf)
symbol_count < symtab_ptr->sh_size / symtab_ptr->sh_entsize;
symbol_count++) {
current_symbol = symbol_ptr + symbol_count;
- if (ELF32_ST_TYPE(current_symbol->st_info) != STT_FUNC ||
- ELF32_ST_BIND(current_symbol->st_info) != STB_GLOBAL) {
+ if (ELFXX_ST_TYPE(current_symbol->st_info) != STT_FUNC ||
+ ELFXX_ST_BIND(current_symbol->st_info) != STB_GLOBAL) {
continue;
}
if ((name = elf_strptr (elf_ptr, elf_str_index,
|