--- main.d/scratchbox-utils-84/libsb.c	2005-02-15 09:49:54.000000000 +0200
+++ main.d/scratchbox-utils-84/libsb.c	2005-06-01 01:25:00.000000000 +0300
@@ -140,10 +140,18 @@
 #endif
 
 /* TODO: should we drop class testing? */
+#if defined(__x86_64__)
+#define elf_class   ELFCLASS64
+#elif
 #define elf_class   ELFCLASS32
+#endif
 
 /* TODO: how can this be made portable? */
+#if defined(__x86_64__)
+#define elf_machine EM_X86_64
+#elif
 #define elf_machine EM_386
+#endif
 
 /*
  * Returns binary type that best describes the ELF binary.
@@ -155,8 +163,13 @@
 	struct stat status;
 	char *region;
 	unsigned int reloc0, ph_base, ph_frag;
+#if defined(__x86_64__)
+ 	Elf64_Ehdr *ehdr;
+	Elf64_Phdr *phdr;
+#elif
 	Elf32_Ehdr *ehdr;
 	Elf32_Phdr *phdr;
+#endif
 
 	retval = BIN_NONE;
 
@@ -179,8 +192,12 @@
 	if (!region) {
 		goto _out_close;
 	}
-
+  
+#if defined(__x86_64__)
+	ehdr = (Elf64_Ehdr *) region;
+#elif
 	ehdr = (Elf32_Ehdr *) region;
+#endif
 
 	if (strncmp((char *) ehdr, ELFMAG, SELFMAG) != 0) {
 		goto _out_munmap;
@@ -202,7 +219,11 @@
 	ph_base = ehdr->e_phoff & PAGE_MASK;
 	ph_frag = ehdr->e_phoff - ph_base;
 
+#if defined(__x86_64__)
+	phdr = (Elf64_Phdr *) (region + ph_base + ph_frag);
+#elif
 	phdr = (Elf32_Phdr *) (region + ph_base + ph_frag);
+#endif
 
 	for (j = phnum; --j >= 0; ++phdr) {
 		if (PT_LOAD == phdr->p_type && ~0 == reloc0) {
@@ -215,7 +236,11 @@
 	for (j = phnum; --j >= 0; ++phdr) {
 		int szDyn;
 		unsigned int pt_base, pt_frag;
+#if defined(__x86_64__)
+		Elf64_Dyn *dp_rpath, *dp_strsz, *dp_strtab, *dp;
+#elif
 		Elf32_Dyn *dp_rpath, *dp_strsz, *dp_strtab, *dp;
+#endif
 
 		if (PT_DYNAMIC != phdr->p_type) {
 			continue;
@@ -231,7 +256,11 @@
 		dp_strsz = NULL;
 		dp_strtab = NULL;
 
+#if defined(__x86_64__)
+		dp = (Elf64_Dyn *) ((char *) region + pt_base + pt_frag);
+#elif
 		dp = (Elf32_Dyn *) ((char *) region + pt_base + pt_frag);
+#endif
 
 		for (; 0 <= (szDyn -= sizeof (*dp)); ++dp) {
 			if (DT_RPATH == dp->d_tag) {
