OSDN Git Service

some fixes by anemo in Bug 9 to play nicely with 32 or 64 bit hosts
authorMike Frysinger <vapier@gentoo.org>
Mon, 29 Aug 2005 22:45:11 +0000 (22:45 -0000)
committerMike Frysinger <vapier@gentoo.org>
Mon, 29 Aug 2005 22:45:11 +0000 (22:45 -0000)
ldso/include/dl-hash.h
ldso/include/ldso.h
ldso/ldso/dl-elf.c
ldso/ldso/dl-hash.c

index 162c7b4..af6c2b9 100644 (file)
@@ -32,15 +32,15 @@ struct elf_resolve{
   unsigned short usage_count;
   unsigned short int init_flag;
   unsigned long rtld_flags; /* RTLD_GLOBAL, RTLD_NOW etc. */
-  Elf32_Word nbucket;
-  Elf32_Word *elf_buckets;
+  Elf_Symndx nbucket;
+  Elf_Symndx *elf_buckets;
   struct init_fini_list *init_fini;
   struct init_fini_list *rtld_local; /* keep tack of RTLD_LOCAL libs in same group */
   /*
    * These are only used with ELF style shared libraries
    */
-  Elf32_Word nchain;
-  Elf32_Word *chains;
+  Elf_Symndx nchain;
+  Elf_Symndx *chains;
   unsigned long dynamic_info[DYNAMIC_SIZE];
 
   unsigned long n_phent;
index ceb8aae..300a729 100644 (file)
@@ -20,6 +20,7 @@
 /* Pull in compiler and arch stuff */
 #include <stdlib.h>
 #include <stdarg.h>
+#include <bits/wordsize.h>
 /* Pull in the arch specific type information */
 #include <sys/types.h>
 /* Pull in the ldso syscalls and string functions */
index 15ba3b9..14a10bc 100644 (file)
@@ -693,7 +693,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure,
        if (lpnt) {
                lpnt = (unsigned long *) (dynamic_info[DT_PLTGOT]);
                INIT_GOT(lpnt, tpnt);
-       };
+       }
 
        _dl_if_debug_dprint("\n\tfile='%s';  generating link map\n", libname);
        _dl_if_debug_dprint("\t\tdynamic: %x  base: %x\n", dynamic_addr, libaddr);
@@ -770,7 +770,11 @@ int _dl_fixup(struct dyn_elf *rpnt, int now_flag)
 /* Minimal printf which handles only %s, %d, and %x */
 void _dl_dprintf(int fd, const char *fmt, ...)
 {
-       long num;
+#if __WORDSIZE > 32
+       long int num;
+#else
+       int num;
+#endif
        va_list args;
        char *start, *ptr, *string;
        static char *buf;
@@ -818,8 +822,11 @@ void _dl_dprintf(int fd, const char *fmt, ...)
                                case 'd':
                                        {
                                                char tmp[22];
-                                               num = va_arg(args, long);
-
+#if __WORDSIZE > 32
+                                               num = va_arg(args, long int);
+#else
+                                               num = va_arg(args, int);
+#endif
                                                string = _dl_simple_ltoa(tmp, num);
                                                _dl_write(fd, string, _dl_strlen(string));
                                                break;
@@ -828,8 +835,11 @@ void _dl_dprintf(int fd, const char *fmt, ...)
                                case 'X':
                                        {
                                                char tmp[22];
-                                               num = va_arg(args, long);
-
+#if __WORDSIZE > 32
+                                               num = va_arg(args, long int);
+#else
+                                               num = va_arg(args, int);
+#endif
                                                string = _dl_simple_ltoahex(tmp, num);
                                                _dl_write(fd, string, _dl_strlen(string));
                                                break;
index 977934e..188b291 100644 (file)
@@ -57,7 +57,7 @@ struct dyn_elf *_dl_handles = NULL;
 /* This is the hash function that is used by the ELF linker to generate the
  * hash table that each executable and library is required to have.  We need
  * it to decode the hash table.  */
-static inline Elf32_Word _dl_elf_hash(const char *name)
+static inline Elf_Symndx _dl_elf_hash(const char *name)
 {
        unsigned long hash=0;
        unsigned long tmp;
@@ -101,7 +101,7 @@ struct elf_resolve *_dl_add_elf_hash_table(const char *libname,
        char *loadaddr, unsigned long *dynamic_info, unsigned long dynamic_addr,
        unsigned long dynamic_size)
 {
-       Elf32_Word *hash_addr;
+       Elf_Symndx *hash_addr;
        struct elf_resolve *tpnt;
        int i;
 
@@ -125,7 +125,7 @@ struct elf_resolve *_dl_add_elf_hash_table(const char *libname,
        tpnt->libtype = loaded_file;
 
        if (dynamic_info[DT_HASH] != 0) {
-               hash_addr = (Elf32_Word*)dynamic_info[DT_HASH];
+               hash_addr = (Elf_Symndx*)dynamic_info[DT_HASH];
                tpnt->nbucket = *hash_addr++;
                tpnt->nchain = *hash_addr++;
                tpnt->elf_buckets = hash_addr;