From 63882a13e073afa4efed39459215e239bfa23f9d Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Tue, 1 May 2001 19:06:35 +0000 Subject: Another cleanup. Never pass addresses as an 'int' -Erik --- ldso/ldso/boot1.c | 60 ++++++++++++++++++++++------------------------ ldso/ldso/dl-elf.c | 30 +++++++++++------------ ldso/ldso/dl-hash.c | 12 +++++----- ldso/ldso/hash.c | 12 +++++----- ldso/ldso/hash.h | 28 ++++++++++------------ ldso/ldso/i386/dl-sysdep.h | 8 +++---- ldso/ldso/i386/elfinterp.c | 44 +++++++++++++++++----------------- ldso/ldso/i386/ld_sysdep.h | 8 +++---- ldso/ldso/i386/sysdep.h | 8 +++---- ldso/ldso/ld-uClibc.c | 60 ++++++++++++++++++++++------------------------ ldso/ldso/ld_hash.h | 28 ++++++++++------------ ldso/ldso/ld_syscall.h | 9 ++++++- ldso/ldso/ldso.c | 60 ++++++++++++++++++++++------------------------ ldso/ldso/linuxelf.h | 14 +++++------ ldso/ldso/readelflib1.c | 30 +++++++++++------------ ldso/ldso/syscall.h | 9 ++++++- 16 files changed, 210 insertions(+), 210 deletions(-) (limited to 'ldso/ldso') diff --git a/ldso/ldso/boot1.c b/ldso/ldso/boot1.c index 948a6e159..ca8bdbab4 100644 --- a/ldso/ldso/boot1.c +++ b/ldso/ldso/boot1.c @@ -120,9 +120,9 @@ void *(*_dl_malloc_function) (int size) = NULL; struct r_debug *_dl_debug_addr = NULL; -unsigned int *_dl_brkp; +unsigned long *_dl_brkp; -unsigned int *_dl_envp; +unsigned long *_dl_envp; #define DL_MALLOC(SIZE) ((void *) (malloc_buffer += SIZE, malloc_buffer - SIZE)) /* @@ -130,7 +130,7 @@ unsigned int *_dl_envp; * platforms we may need to increase this to 8, but this is good enough for * now. This is typically called after DL_MALLOC. */ -#define REALIGN() malloc_buffer = (char *) (((unsigned int) malloc_buffer + 3) & ~(3)) +#define REALIGN() malloc_buffer = (char *) (((unsigned long) malloc_buffer + 3) & ~(3)) @@ -161,31 +161,29 @@ void _dl_debug_state() return; } -void _dl_boot(int args); - -void _dl_boot(int args) +void _dl_boot(unsigned long args) { - unsigned int argc; + unsigned long argc; char **argv, **envp; int status; - unsigned int load_addr; - unsigned int *got; - unsigned int *aux_dat; + unsigned long load_addr; + unsigned long *got; + unsigned long *aux_dat; int goof = 0; elfhdr *header; struct elf_resolve *tpnt; struct dyn_elf *rpnt; struct elf_resolve *app_tpnt; - unsigned int brk_addr; - unsigned int dl_data[AT_EGID + 1]; + unsigned long brk_addr; + unsigned long dl_data[AT_EGID + 1]; unsigned char *malloc_buffer, *mmap_zero; int (*_dl_atexit) (void *); - int *lpnt; + unsigned long *lpnt; Elf32_Dyn *dpnt; - unsigned int *hash_addr; + unsigned long *hash_addr; struct r_debug *debug_addr; - unsigned int *chains; + unsigned long *chains; int indx; int _dl_secure; @@ -204,7 +202,7 @@ void _dl_boot(int args) dl_data[AT_UID] = -1; /* check later to see if it is changed */ while (*aux_dat) { - unsigned int *ad1; + unsigned long *ad1; ad1 = aux_dat + 1; if (*aux_dat <= AT_EGID) @@ -282,7 +280,7 @@ void _dl_boot(int args) } app_tpnt->dynamic_info[dpnt->d_tag] = dpnt->d_un.d_val; if (dpnt->d_tag == DT_DEBUG) - dpnt->d_un.d_val = (int) debug_addr; + dpnt->d_un.d_val = (unsigned long) debug_addr; if (dpnt->d_tag == DT_TEXTREL || SVR4_BUGCOMPAT) app_tpnt->dynamic_info[DT_TEXTREL] = 1; dpnt++; @@ -293,7 +291,7 @@ void _dl_boot(int args) /* Get some more of the information that we will need to dynamicly link this module to itself */ - hash_addr = (unsigned int *) (tpnt->dynamic_info[DT_HASH] + load_addr); + hash_addr = (unsigned long *) (tpnt->dynamic_info[DT_HASH] + load_addr); tpnt->nbucket = *hash_addr++; tpnt->nchain = *hash_addr++; tpnt->elf_buckets = hash_addr; @@ -317,7 +315,7 @@ void _dl_boot(int args) _dl_mprotect((void *) (load_addr + (ppnt->p_vaddr & 0xfffff000)), (ppnt->p_vaddr & 0xfff) + - (unsigned int) ppnt->p_filesz, + (unsigned long) ppnt->p_filesz, PROT_READ | PROT_WRITE | PROT_EXEC); } } @@ -329,7 +327,7 @@ void _dl_boot(int args) if (ppnt->p_type == PT_LOAD && !(ppnt->p_flags & PF_W)) _dl_mprotect((void *) (ppnt->p_vaddr & 0xfffff000), (ppnt->p_vaddr & 0xfff) + - (unsigned int) ppnt->p_filesz, + (unsigned long) ppnt->p_filesz, PROT_READ | PROT_WRITE | PROT_EXEC); } } @@ -342,10 +340,10 @@ void _dl_boot(int args) for (indx = 0; indx < 2; indx++) { int i; ELF_RELOC *rpnt; - unsigned int *reloc_addr; - unsigned int symbol_addr; + unsigned long *reloc_addr; + unsigned long symbol_addr; int symtab_index; - unsigned int rel_addr, rel_size; + unsigned long rel_addr, rel_size; #ifdef ELF_USES_RELOCA @@ -371,7 +369,7 @@ void _dl_boot(int args) /* Now parse the relocation information */ rpnt = (ELF_RELOC *) (rel_addr + load_addr); for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) { - reloc_addr = (int *) (load_addr + (int) rpnt->r_offset); + reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset); symtab_index = ELF32_R_SYM(rpnt->r_info); symbol_addr = 0; if (symtab_index) { @@ -430,7 +428,7 @@ void _dl_boot(int args) fixed up by now. Still no function calls outside of this library , since the dynamic resolver is not yet ready. */ - lpnt = (int *) (tpnt->dynamic_info[DT_PLTGOT] + load_addr); + lpnt = (unsigned long *) (tpnt->dynamic_info[DT_PLTGOT] + load_addr); INIT_GOT(lpnt, tpnt); /* OK, this was a big step, now we need to scan all of the user images @@ -494,7 +492,7 @@ void _dl_boot(int args) rpnt->dyn = _dl_loaded_modules; app_tpnt->usage_count++; app_tpnt->symbol_scope = _dl_symbol_tables; - lpnt = (int *) (app_tpnt->dynamic_info[DT_PLTGOT]); + lpnt = (unsigned long *) (app_tpnt->dynamic_info[DT_PLTGOT]); #ifdef ALLOW_ZERO_PLTGOT if (lpnt) #endif @@ -812,14 +810,14 @@ void _dl_boot(int args) up each symbol individually. */ - _dl_brkp = (unsigned int *) _dl_find_hash("___brk_addr", NULL, 1, NULL, 0); + _dl_brkp = (unsigned long *) _dl_find_hash("___brk_addr", NULL, 1, NULL, 0); if (_dl_brkp) *_dl_brkp = brk_addr; _dl_envp = - (unsigned int *) _dl_find_hash("__environ", NULL, 1, NULL, 0); + (unsigned long *) _dl_find_hash("__environ", NULL, 1, NULL, 0); if (_dl_envp) - *_dl_envp = (unsigned int) envp; + *_dl_envp = (unsigned long) envp; { int i; @@ -834,7 +832,7 @@ void _dl_boot(int args) _dl_mprotect((void *) (tpnt->loadaddr + (ppnt->p_vaddr & 0xfffff000)), (ppnt->p_vaddr & 0xfff) + - (unsigned int) ppnt->p_filesz, + (unsigned long) ppnt->p_filesz, LXFLAGS(ppnt->p_flags)); } @@ -974,7 +972,7 @@ void *_dl_malloc(int size) * Align memory to 4 byte boundary. Some platforms require this, others * simply get better performance. */ - _dl_malloc_addr = (char *) (((unsigned int) _dl_malloc_addr + 3) & ~(3)); + _dl_malloc_addr = (char *) (((unsigned long) _dl_malloc_addr + 3) & ~(3)); return retval; } diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c index d9b900809..4689e51f2 100644 --- a/ldso/ldso/dl-elf.c +++ b/ldso/ldso/dl-elf.c @@ -121,8 +121,8 @@ int _dl_unmap_cache(void) * Used to return error codes back to dlopen et. al. */ -unsigned int _dl_error_number; -unsigned int _dl_internal_error_number; +unsigned long _dl_error_number; +unsigned long _dl_internal_error_number; struct elf_resolve *_dl_load_shared_library(int secure, struct elf_resolve *tpnt, char *full_libname) @@ -166,7 +166,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, if (tpnt->libtype == elf_executable) { pnt1 = (char *) tpnt->dynamic_info[DT_RPATH]; if (pnt1) { - pnt1 += (unsigned int) tpnt->loadaddr + + pnt1 += (unsigned long) tpnt->loadaddr + tpnt->dynamic_info[DT_STRTAB]; while (*pnt1) { pnt2 = mylibname; @@ -314,8 +314,8 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, char *libname, int flag) { elfhdr *epnt; - unsigned int dynamic_addr = 0; - unsigned int dynamic_size = 0; + unsigned long dynamic_addr = 0; + unsigned long dynamic_size = 0; Elf32_Dyn *dpnt; struct elf_resolve *tpnt; elf_phdr *ppnt; @@ -323,10 +323,10 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, char *status; int flags; char header[4096]; - int dynamic_info[24]; + unsigned long dynamic_info[24]; int *lpnt; - unsigned int libaddr; - unsigned int minvma = 0xffffffff, maxvma = 0; + unsigned long libaddr; + unsigned long minvma = 0xffffffff, maxvma = 0; int i; int infile; @@ -410,7 +410,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, if (piclib && ppnt->p_vaddr < minvma) { minvma = ppnt->p_vaddr; } - if (((unsigned int) ppnt->p_vaddr + ppnt->p_memsz) > maxvma) { + if (((unsigned long) ppnt->p_vaddr + ppnt->p_memsz) > maxvma) { maxvma = ppnt->p_vaddr + ppnt->p_memsz; } } @@ -432,7 +432,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, _dl_close(infile); return NULL; }; - libaddr = (unsigned int) status; + libaddr = (unsigned long) status; flags |= MAP_FIXED; /* Get the memory to store the library */ @@ -450,7 +450,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, if (ppnt->p_flags & PF_W) { - unsigned int map_size; + unsigned long map_size; char *cpnt; status = (char *) _dl_mmap((char *) ((piclib ? libaddr : 0) + @@ -470,7 +470,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, /* Pad the last page with zeroes. */ cpnt = (char *) (status + (ppnt->p_vaddr & 0xfff) + ppnt->p_filesz); - while (((unsigned int) cpnt) & 0xfff) + while (((unsigned long) cpnt) & 0xfff) *cpnt++ = 0; /* I am not quite sure if this is completely @@ -499,7 +499,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, }; /* if(libaddr == 0 && piclib) { - libaddr = (unsigned int) status; + libaddr = (unsigned long) status; flags |= MAP_FIXED; }; */ }; @@ -509,7 +509,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, /* For a non-PIC library, the addresses are all absolute */ if (piclib) { - dynamic_addr += (unsigned int) libaddr; + dynamic_addr += (unsigned long) libaddr; } /* @@ -551,7 +551,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, if (ppnt->p_type == PT_LOAD && !(ppnt->p_flags & PF_W)) _dl_mprotect((void *) ((piclib ? libaddr : 0) + (ppnt->p_vaddr & 0xfffff000)), - (ppnt->p_vaddr & 0xfff) + (unsigned int) ppnt->p_filesz, + (ppnt->p_vaddr & 0xfff) + (unsigned long) ppnt->p_filesz, PROT_READ | PROT_WRITE | PROT_EXEC); } } diff --git a/ldso/ldso/dl-hash.c b/ldso/ldso/dl-hash.c index fa610e012..5639a9a69 100644 --- a/ldso/ldso/dl-hash.c +++ b/ldso/ldso/dl-hash.c @@ -94,10 +94,10 @@ struct elf_resolve *_dl_check_hashed_files(char *libname) */ struct elf_resolve *_dl_add_elf_hash_table(char *libname, - char *loadaddr, unsigned int *dynamic_info, unsigned int dynamic_addr, - unsigned int dynamic_size) + char *loadaddr, unsigned long *dynamic_info, unsigned long dynamic_addr, + unsigned long dynamic_size) { - unsigned int *hash_addr; + unsigned long *hash_addr; struct elf_resolve *tpnt; int i; @@ -123,7 +123,7 @@ struct elf_resolve *_dl_add_elf_hash_table(char *libname, tpnt->libtype = loaded_file; if (dynamic_info[DT_HASH] != 0) { - hash_addr = (unsigned int *) (dynamic_info[DT_HASH] + loadaddr); + hash_addr = (unsigned long *) (dynamic_info[DT_HASH] + loadaddr); tpnt->nbucket = *hash_addr++; tpnt->nchain = *hash_addr++; tpnt->elf_buckets = hash_addr; @@ -143,7 +143,7 @@ struct elf_resolve *_dl_add_elf_hash_table(char *libname, */ char *_dl_find_hash(char *name, struct dyn_elf *rpnt1, - unsigned int instr_addr, struct elf_resolve *f_tpnt, int copyrel) + unsigned long instr_addr, struct elf_resolve *f_tpnt, int copyrel) { struct elf_resolve *tpnt; int si; @@ -151,7 +151,7 @@ char *_dl_find_hash(char *name, struct dyn_elf *rpnt1, int pass; char *strtab; Elf32_Sym *symtab; - unsigned int elf_hash_number, hn; + unsigned long elf_hash_number, hn; char *weak_result; struct elf_resolve *first_def; struct dyn_elf *rpnt, first; diff --git a/ldso/ldso/hash.c b/ldso/ldso/hash.c index fa610e012..5639a9a69 100644 --- a/ldso/ldso/hash.c +++ b/ldso/ldso/hash.c @@ -94,10 +94,10 @@ struct elf_resolve *_dl_check_hashed_files(char *libname) */ struct elf_resolve *_dl_add_elf_hash_table(char *libname, - char *loadaddr, unsigned int *dynamic_info, unsigned int dynamic_addr, - unsigned int dynamic_size) + char *loadaddr, unsigned long *dynamic_info, unsigned long dynamic_addr, + unsigned long dynamic_size) { - unsigned int *hash_addr; + unsigned long *hash_addr; struct elf_resolve *tpnt; int i; @@ -123,7 +123,7 @@ struct elf_resolve *_dl_add_elf_hash_table(char *libname, tpnt->libtype = loaded_file; if (dynamic_info[DT_HASH] != 0) { - hash_addr = (unsigned int *) (dynamic_info[DT_HASH] + loadaddr); + hash_addr = (unsigned long *) (dynamic_info[DT_HASH] + loadaddr); tpnt->nbucket = *hash_addr++; tpnt->nchain = *hash_addr++; tpnt->elf_buckets = hash_addr; @@ -143,7 +143,7 @@ struct elf_resolve *_dl_add_elf_hash_table(char *libname, */ char *_dl_find_hash(char *name, struct dyn_elf *rpnt1, - unsigned int instr_addr, struct elf_resolve *f_tpnt, int copyrel) + unsigned long instr_addr, struct elf_resolve *f_tpnt, int copyrel) { struct elf_resolve *tpnt; int si; @@ -151,7 +151,7 @@ char *_dl_find_hash(char *name, struct dyn_elf *rpnt1, int pass; char *strtab; Elf32_Sym *symtab; - unsigned int elf_hash_number, hn; + unsigned long elf_hash_number, hn; char *weak_result; struct elf_resolve *first_def; struct dyn_elf *rpnt, first; diff --git a/ldso/ldso/hash.h b/ldso/ldso/hash.h index f7c6eebd5..74bac2f7d 100644 --- a/ldso/ldso/hash.h +++ b/ldso/ldso/hash.h @@ -5,7 +5,7 @@ #endif struct dyn_elf{ - unsigned int flags; + unsigned long flags; struct elf_resolve * dyn; struct dyn_elf * next_handle; /* Used by dlopen et al. */ struct dyn_elf * next; @@ -16,7 +16,7 @@ struct elf_resolve{ by gdb to obtain the list of symbols. */ char * loadaddr; char * libname; - unsigned int dynamic_addr; + unsigned long dynamic_addr; struct elf_resolve * next; struct elf_resolve * prev; /* Nothing after this address is used by gdb. */ @@ -25,16 +25,16 @@ struct elf_resolve{ unsigned short usage_count; unsigned short int init_flag; unsigned int nbucket; - unsigned int * elf_buckets; + unsigned long * elf_buckets; /* * These are only used with ELF style shared libraries */ - unsigned int nchain; - unsigned int * chains; - unsigned int dynamic_info[24]; + unsigned long nchain; + unsigned long * chains; + unsigned long dynamic_info[24]; - unsigned int dynamic_size; - unsigned int n_phent; + unsigned long dynamic_size; + unsigned long n_phent; Elf32_Phdr * ppnt; }; @@ -64,15 +64,11 @@ extern struct dyn_elf * _dl_handles; extern struct elf_resolve * _dl_check_hashed_files(char * libname); extern struct elf_resolve * _dl_add_elf_hash_table(char * libname, - char * loadaddr, - unsigned int * dynamic_info, - unsigned int dynamic_addr, - unsigned int dynamic_size); + char * loadaddr, unsigned long * dynamic_info, + unsigned long dynamic_addr, unsigned long dynamic_size); extern char * _dl_find_hash(char * name, struct dyn_elf * rpnt1, - unsigned int instr_addr, - struct elf_resolve * f_tpnt, - int copyrel); - + unsigned long instr_addr, struct elf_resolve * f_tpnt, + int copyrel); extern int _dl_linux_dynamic_link(void); #ifdef __mc68000__ diff --git a/ldso/ldso/i386/dl-sysdep.h b/ldso/ldso/i386/dl-sysdep.h index 64d4b7a46..d8e57a66c 100644 --- a/ldso/ldso/i386/dl-sysdep.h +++ b/ldso/ldso/i386/dl-sysdep.h @@ -13,7 +13,7 @@ * the address if the first argument, on other platforms we need to * do something a little more subtle here. */ -#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned int*) & ARGS) +#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long*) & ARGS) /* * Get the address of the Global offset table. This must be absolute, not * relative. @@ -42,14 +42,14 @@ *REL += SYMBOL; \ break; \ case R_386_PC32: \ - *REL += SYMBOL - (unsigned int) REL; \ + *REL += SYMBOL - (unsigned long) REL; \ break; \ case R_386_GLOB_DAT: \ case R_386_JMP_SLOT: \ *REL = SYMBOL; \ break; \ case R_386_RELATIVE: \ - *REL += (unsigned int) LOAD; \ + *REL += (unsigned long) LOAD; \ break; \ default: \ _dl_exit(1); \ @@ -76,6 +76,6 @@ #define ELF_TARGET "386" struct elf_resolve; -extern unsigned int _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); +extern unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); #define do_rem(result, n, base) result = (n % base) diff --git a/ldso/ldso/i386/elfinterp.c b/ldso/ldso/i386/elfinterp.c index e0d3505f9..aa795d803 100644 --- a/ldso/ldso/i386/elfinterp.c +++ b/ldso/ldso/i386/elfinterp.c @@ -51,7 +51,7 @@ extern char *_dl_progname; extern int _dl_linux_resolve(void); -unsigned int _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry) +unsigned long _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry) { int reloc_type; Elf32_Rel *this_reloc; @@ -61,7 +61,7 @@ unsigned int _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry) int symtab_index; char *new_addr; char **got_addr; - unsigned int instr_addr; + unsigned long instr_addr; rel_addr = (Elf32_Rel *) (tpnt->dynamic_info[DT_JMPREL] + tpnt->loadaddr); @@ -98,7 +98,7 @@ unsigned int _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry) }; /* #define DEBUG_LIBRARY */ #ifdef DEBUG_LIBRARY - if ((unsigned int) got_addr < 0x40000000) { + if ((unsigned long) got_addr < 0x40000000) { _dl_fdprintf(2, "Calling library function: %s\n", strtab + symtab[symtab_index].st_name); } else { @@ -107,11 +107,11 @@ unsigned int _dl_linux_resolver(struct elf_resolve *tpnt, int reloc_entry) #else *got_addr = new_addr; #endif - return (unsigned int) new_addr; + return (unsigned long) new_addr; } void _dl_parse_lazy_relocation_information(struct elf_resolve *tpnt, - int rel_addr, int rel_size, int type) + unsigned long rel_addr, unsigned long rel_size, int type) { int i; char *strtab; @@ -119,7 +119,7 @@ void _dl_parse_lazy_relocation_information(struct elf_resolve *tpnt, int symtab_index; Elf32_Sym *symtab; Elf32_Rel *rpnt; - unsigned int *reloc_addr; + unsigned long *reloc_addr; /* Now parse the relocation information */ rpnt = (Elf32_Rel *) (rel_addr + tpnt->loadaddr); @@ -130,7 +130,7 @@ void _dl_parse_lazy_relocation_information(struct elf_resolve *tpnt, strtab = (char *) (tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); for (i = 0; i < rel_size; i++, rpnt++) { - reloc_addr = (int *) (tpnt->loadaddr + (int) rpnt->r_offset); + reloc_addr = (unsigned long *) (tpnt->loadaddr + (unsigned long) rpnt->r_offset); reloc_type = ELF32_R_TYPE(rpnt->r_info); symtab_index = ELF32_R_SYM(rpnt->r_info); @@ -146,7 +146,7 @@ void _dl_parse_lazy_relocation_information(struct elf_resolve *tpnt, case R_386_NONE: break; case R_386_JMP_SLOT: - *reloc_addr += (unsigned int) tpnt->loadaddr; + *reloc_addr += (unsigned long) tpnt->loadaddr; break; default: _dl_fdprintf(2, "%s: (LAZY) can't handle reloc type ", @@ -162,7 +162,7 @@ void _dl_parse_lazy_relocation_information(struct elf_resolve *tpnt, } int _dl_parse_relocation_information(struct elf_resolve *tpnt, - int rel_addr, int rel_size, int type) + unsigned long rel_addr, unsigned long rel_size, int type) { int i; char *strtab; @@ -170,8 +170,8 @@ int _dl_parse_relocation_information(struct elf_resolve *tpnt, int goof = 0; Elf32_Sym *symtab; Elf32_Rel *rpnt; - unsigned int *reloc_addr; - unsigned int symbol_addr; + unsigned long *reloc_addr; + unsigned long symbol_addr; int symtab_index; /* Now parse the relocation information */ @@ -184,7 +184,7 @@ int _dl_parse_relocation_information(struct elf_resolve *tpnt, strtab = (char *) (tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); for (i = 0; i < rel_size; i++, rpnt++) { - reloc_addr = (int *) (tpnt->loadaddr + (int) rpnt->r_offset); + reloc_addr = (unsigned long *) (tpnt->loadaddr + (unsigned long) rpnt->r_offset); reloc_type = ELF32_R_TYPE(rpnt->r_info); symtab_index = ELF32_R_SYM(rpnt->r_info); symbol_addr = 0; @@ -198,9 +198,9 @@ int _dl_parse_relocation_information(struct elf_resolve *tpnt, _dl_symbol(strtab + symtab[symtab_index].st_name)) continue; - symbol_addr = (unsigned int) + symbol_addr = (unsigned long) _dl_find_hash(strtab + symtab[symtab_index].st_name, - tpnt->symbol_scope, (int) reloc_addr, + tpnt->symbol_scope, (unsigned long) reloc_addr, (reloc_type == R_386_JMP_SLOT ? tpnt : NULL), 0); /* @@ -223,14 +223,14 @@ int _dl_parse_relocation_information(struct elf_resolve *tpnt, *reloc_addr += symbol_addr; break; case R_386_PC32: - *reloc_addr += symbol_addr - (unsigned int) reloc_addr; + *reloc_addr += symbol_addr - (unsigned long) reloc_addr; break; case R_386_GLOB_DAT: case R_386_JMP_SLOT: *reloc_addr = symbol_addr; break; case R_386_RELATIVE: - *reloc_addr += (unsigned int) tpnt->loadaddr; + *reloc_addr += (unsigned long) tpnt->loadaddr; break; case R_386_COPY: #if 0 @@ -266,8 +266,8 @@ int _dl_parse_relocation_information(struct elf_resolve *tpnt, /* No, there are cases where the SVr4 linker fails to emit COPY relocs at all */ -int _dl_parse_copy_information(struct dyn_elf *xpnt, int rel_addr, - int rel_size, int type) +int _dl_parse_copy_information(struct dyn_elf *xpnt, unsigned long rel_addr, + unsigned long rel_size, int type) { int i; char *strtab; @@ -275,8 +275,8 @@ int _dl_parse_copy_information(struct dyn_elf *xpnt, int rel_addr, int goof = 0; Elf32_Sym *symtab; Elf32_Rel *rpnt; - unsigned int *reloc_addr; - unsigned int symbol_addr; + unsigned long *reloc_addr; + unsigned long symbol_addr; struct elf_resolve *tpnt; int symtab_index; @@ -291,7 +291,7 @@ int _dl_parse_copy_information(struct dyn_elf *xpnt, int rel_addr, strtab = (char *) (tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr); for (i = 0; i < rel_size; i++, rpnt++) { - reloc_addr = (int *) (tpnt->loadaddr + (int) rpnt->r_offset); + reloc_addr = (unsigned long *) (tpnt->loadaddr + (unsigned long) rpnt->r_offset); reloc_type = ELF32_R_TYPE(rpnt->r_info); if (reloc_type != R_386_COPY) continue; @@ -305,7 +305,7 @@ int _dl_parse_copy_information(struct dyn_elf *xpnt, int rel_addr, _dl_symbol(strtab + symtab[symtab_index].st_name)) continue; - symbol_addr = (unsigned int) _dl_find_hash(strtab + symtab[symtab_index].st_name, + symbol_addr = (unsigned long) _dl_find_hash(strtab + symtab[symtab_index].st_name, xpnt->next, (int) reloc_addr, NULL, 1); if (!symbol_addr) { _dl_fdprintf(2, "%s: can't resolve symbol '%s'\n", diff --git a/ldso/ldso/i386/ld_sysdep.h b/ldso/ldso/i386/ld_sysdep.h index 64d4b7a46..d8e57a66c 100644 --- a/ldso/ldso/i386/ld_sysdep.h +++ b/ldso/ldso/i386/ld_sysdep.h @@ -13,7 +13,7 @@ * the address if the first argument, on other platforms we need to * do something a little more subtle here. */ -#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned int*) & ARGS) +#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long*) & ARGS) /* * Get the address of the Global offset table. This must be absolute, not * relative. @@ -42,14 +42,14 @@ *REL += SYMBOL; \ break; \ case R_386_PC32: \ - *REL += SYMBOL - (unsigned int) REL; \ + *REL += SYMBOL - (unsigned long) REL; \ break; \ case R_386_GLOB_DAT: \ case R_386_JMP_SLOT: \ *REL = SYMBOL; \ break; \ case R_386_RELATIVE: \ - *REL += (unsigned int) LOAD; \ + *REL += (unsigned long) LOAD; \ break; \ default: \ _dl_exit(1); \ @@ -76,6 +76,6 @@ #define ELF_TARGET "386" struct elf_resolve; -extern unsigned int _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); +extern unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); #define do_rem(result, n, base) result = (n % base) diff --git a/ldso/ldso/i386/sysdep.h b/ldso/ldso/i386/sysdep.h index 64d4b7a46..d8e57a66c 100644 --- a/ldso/ldso/i386/sysdep.h +++ b/ldso/ldso/i386/sysdep.h @@ -13,7 +13,7 @@ * the address if the first argument, on other platforms we need to * do something a little more subtle here. */ -#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned int*) & ARGS) +#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long*) & ARGS) /* * Get the address of the Global offset table. This must be absolute, not * relative. @@ -42,14 +42,14 @@ *REL += SYMBOL; \ break; \ case R_386_PC32: \ - *REL += SYMBOL - (unsigned int) REL; \ + *REL += SYMBOL - (unsigned long) REL; \ break; \ case R_386_GLOB_DAT: \ case R_386_JMP_SLOT: \ *REL = SYMBOL; \ break; \ case R_386_RELATIVE: \ - *REL += (unsigned int) LOAD; \ + *REL += (unsigned long) LOAD; \ break; \ default: \ _dl_exit(1); \ @@ -76,6 +76,6 @@ #define ELF_TARGET "386" struct elf_resolve; -extern unsigned int _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); +extern unsigned long _dl_linux_resolver(struct elf_resolve * tpnt, int reloc_entry); #define do_rem(result, n, base) result = (n % base) diff --git a/ldso/ldso/ld-uClibc.c b/ldso/ldso/ld-uClibc.c index 948a6e159..ca8bdbab4 100644 --- a/ldso/ldso/ld-uClibc.c +++ b/ldso/ldso/ld-uClibc.c @@ -120,9 +120,9 @@ void *(*_dl_malloc_function) (int size) = NULL; struct r_debug *_dl_debug_addr = NULL; -unsigned int *_dl_brkp; +unsigned long *_dl_brkp; -unsigned int *_dl_envp; +unsigned long *_dl_envp; #define DL_MALLOC(SIZE) ((void *) (malloc_buffer += SIZE, malloc_buffer - SIZE)) /* @@ -130,7 +130,7 @@ unsigned int *_dl_envp; * platforms we may need to increase this to 8, but this is good enough for * now. This is typically called after DL_MALLOC. */ -#define REALIGN() malloc_buffer = (char *) (((unsigned int) malloc_buffer + 3) & ~(3)) +#define REALIGN() malloc_buffer = (char *) (((unsigned long) malloc_buffer + 3) & ~(3)) @@ -161,31 +161,29 @@ void _dl_debug_state() return; } -void _dl_boot(int args); - -void _dl_boot(int args) +void _dl_boot(unsigned long args) { - unsigned int argc; + unsigned long argc; char **argv, **envp; int status; - unsigned int load_addr; - unsigned int *got; - unsigned int *aux_dat; + unsigned long load_addr; + unsigned long *got; + unsigned long *aux_dat; int goof = 0; elfhdr *header; struct elf_resolve *tpnt; struct dyn_elf *rpnt; struct elf_resolve *app_tpnt; - unsigned int brk_addr; - unsigned int dl_data[AT_EGID + 1]; + unsigned long brk_addr; + unsigned long dl_data[AT_EGID + 1]; unsigned char *malloc_buffer, *mmap_zero; int (*_dl_atexit) (void *); - int *lpnt; + unsigned long *lpnt; Elf32_Dyn *dpnt; - unsigned int *hash_addr; + unsigned long *hash_addr; struct r_debug *debug_addr; - unsigned int *chains; + unsigned long *chains; int indx; int _dl_secure; @@ -204,7 +202,7 @@ void _dl_boot(int args) dl_data[AT_UID] = -1; /* check later to see if it is changed */ while (*aux_dat) { - unsigned int *ad1; + unsigned long *ad1; ad1 = aux_dat + 1; if (*aux_dat <= AT_EGID) @@ -282,7 +280,7 @@ void _dl_boot(int args) } app_tpnt->dynamic_info[dpnt->d_tag] = dpnt->d_un.d_val; if (dpnt->d_tag == DT_DEBUG) - dpnt->d_un.d_val = (int) debug_addr; + dpnt->d_un.d_val = (unsigned long) debug_addr; if (dpnt->d_tag == DT_TEXTREL || SVR4_BUGCOMPAT) app_tpnt->dynamic_info[DT_TEXTREL] = 1; dpnt++; @@ -293,7 +291,7 @@ void _dl_boot(int args) /* Get some more of the information that we will need to dynamicly link this module to itself */ - hash_addr = (unsigned int *) (tpnt->dynamic_info[DT_HASH] + load_addr); + hash_addr = (unsigned long *) (tpnt->dynamic_info[DT_HASH] + load_addr); tpnt->nbucket = *hash_addr++; tpnt->nchain = *hash_addr++; tpnt->elf_buckets = hash_addr; @@ -317,7 +315,7 @@ void _dl_boot(int args) _dl_mprotect((void *) (load_addr + (ppnt->p_vaddr & 0xfffff000)), (ppnt->p_vaddr & 0xfff) + - (unsigned int) ppnt->p_filesz, + (unsigned long) ppnt->p_filesz, PROT_READ | PROT_WRITE | PROT_EXEC); } } @@ -329,7 +327,7 @@ void _dl_boot(int args) if (ppnt->p_type == PT_LOAD && !(ppnt->p_flags & PF_W)) _dl_mprotect((void *) (ppnt->p_vaddr & 0xfffff000), (ppnt->p_vaddr & 0xfff) + - (unsigned int) ppnt->p_filesz, + (unsigned long) ppnt->p_filesz, PROT_READ | PROT_WRITE | PROT_EXEC); } } @@ -342,10 +340,10 @@ void _dl_boot(int args) for (indx = 0; indx < 2; indx++) { int i; ELF_RELOC *rpnt; - unsigned int *reloc_addr; - unsigned int symbol_addr; + unsigned long *reloc_addr; + unsigned long symbol_addr; int symtab_index; - unsigned int rel_addr, rel_size; + unsigned long rel_addr, rel_size; #ifdef ELF_USES_RELOCA @@ -371,7 +369,7 @@ void _dl_boot(int args) /* Now parse the relocation information */ rpnt = (ELF_RELOC *) (rel_addr + load_addr); for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) { - reloc_addr = (int *) (load_addr + (int) rpnt->r_offset); + reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset); symtab_index = ELF32_R_SYM(rpnt->r_info); symbol_addr = 0; if (symtab_index) { @@ -430,7 +428,7 @@ void _dl_boot(int args) fixed up by now. Still no function calls outside of this library , since the dynamic resolver is not yet ready. */ - lpnt = (int *) (tpnt->dynamic_info[DT_PLTGOT] + load_addr); + lpnt = (unsigned long *) (tpnt->dynamic_info[DT_PLTGOT] + load_addr); INIT_GOT(lpnt, tpnt); /* OK, this was a big step, now we need to scan all of the user images @@ -494,7 +492,7 @@ void _dl_boot(int args) rpnt->dyn = _dl_loaded_modules; app_tpnt->usage_count++; app_tpnt->symbol_scope = _dl_symbol_tables; - lpnt = (int *) (app_tpnt->dynamic_info[DT_PLTGOT]); + lpnt = (unsigned long *) (app_tpnt->dynamic_info[DT_PLTGOT]); #ifdef ALLOW_ZERO_PLTGOT if (lpnt) #endif @@ -812,14 +810,14 @@ void _dl_boot(int args) up each symbol individually. */ - _dl_brkp = (unsigned int *) _dl_find_hash("___brk_addr", NULL, 1, NULL, 0); + _dl_brkp = (unsigned long *) _dl_find_hash("___brk_addr", NULL, 1, NULL, 0); if (_dl_brkp) *_dl_brkp = brk_addr; _dl_envp = - (unsigned int *) _dl_find_hash("__environ", NULL, 1, NULL, 0); + (unsigned long *) _dl_find_hash("__environ", NULL, 1, NULL, 0); if (_dl_envp) - *_dl_envp = (unsigned int) envp; + *_dl_envp = (unsigned long) envp; { int i; @@ -834,7 +832,7 @@ void _dl_boot(int args) _dl_mprotect((void *) (tpnt->loadaddr + (ppnt->p_vaddr & 0xfffff000)), (ppnt->p_vaddr & 0xfff) + - (unsigned int) ppnt->p_filesz, + (unsigned long) ppnt->p_filesz, LXFLAGS(ppnt->p_flags)); } @@ -974,7 +972,7 @@ void *_dl_malloc(int size) * Align memory to 4 byte boundary. Some platforms require this, others * simply get better performance. */ - _dl_malloc_addr = (char *) (((unsigned int) _dl_malloc_addr + 3) & ~(3)); + _dl_malloc_addr = (char *) (((unsigned long) _dl_malloc_addr + 3) & ~(3)); return retval; } diff --git a/ldso/ldso/ld_hash.h b/ldso/ldso/ld_hash.h index f7c6eebd5..74bac2f7d 100644 --- a/ldso/ldso/ld_hash.h +++ b/ldso/ldso/ld_hash.h @@ -5,7 +5,7 @@ #endif struct dyn_elf{ - unsigned int flags; + unsigned long flags; struct elf_resolve * dyn; struct dyn_elf * next_handle; /* Used by dlopen et al. */ struct dyn_elf * next; @@ -16,7 +16,7 @@ struct elf_resolve{ by gdb to obtain the list of symbols. */ char * loadaddr; char * libname; - unsigned int dynamic_addr; + unsigned long dynamic_addr; struct elf_resolve * next; struct elf_resolve * prev; /* Nothing after this address is used by gdb. */ @@ -25,16 +25,16 @@ struct elf_resolve{ unsigned short usage_count; unsigned short int init_flag; unsigned int nbucket; - unsigned int * elf_buckets; + unsigned long * elf_buckets; /* * These are only used with ELF style shared libraries */ - unsigned int nchain; - unsigned int * chains; - unsigned int dynamic_info[24]; + unsigned long nchain; + unsigned long * chains; + unsigned long dynamic_info[24]; - unsigned int dynamic_size; - unsigned int n_phent; + unsigned long dynamic_size; + unsigned long n_phent; Elf32_Phdr * ppnt; }; @@ -64,15 +64,11 @@ extern struct dyn_elf * _dl_handles; extern struct elf_resolve * _dl_check_hashed_files(char * libname); extern struct elf_resolve * _dl_add_elf_hash_table(char * libname, - char * loadaddr, - unsigned int * dynamic_info, - unsigned int dynamic_addr, - unsigned int dynamic_size); + char * loadaddr, unsigned long * dynamic_info, + unsigned long dynamic_addr, unsigned long dynamic_size); extern char * _dl_find_hash(char * name, struct dyn_elf * rpnt1, - unsigned int instr_addr, - struct elf_resolve * f_tpnt, - int copyrel); - + unsigned long instr_addr, struct elf_resolve * f_tpnt, + int copyrel); extern int _dl_linux_dynamic_link(void); #ifdef __mc68000__ diff --git a/ldso/ldso/ld_syscall.h b/ldso/ldso/ld_syscall.h index 6678e2c74..167e2ed15 100644 --- a/ldso/ldso/ld_syscall.h +++ b/ldso/ldso/ld_syscall.h @@ -37,7 +37,14 @@ static inline void * _dl_mmap(void * addr, unsigned long size, int prot, #endif #define _dl_mmap_check_error(__res) \ (((int)__res) < 0 && ((int)__res) >= -_dl_MAX_ERRNO) - +#include // For MAP_ANONYMOUS -- differs between platforms +#ifndef MAP_ANONYMOUS +#ifdef __sparc__ +#define MAP_ANONYMOUS 0x20 +#else +#error MAP_ANONYMOUS not defined and suplementary value not known +#endif +#endif #define __NR__dl_open __NR_open diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c index 948a6e159..ca8bdbab4 100644 --- a/ldso/ldso/ldso.c +++ b/ldso/ldso/ldso.c @@ -120,9 +120,9 @@ void *(*_dl_malloc_function) (int size) = NULL; struct r_debug *_dl_debug_addr = NULL; -unsigned int *_dl_brkp; +unsigned long *_dl_brkp; -unsigned int *_dl_envp; +unsigned long *_dl_envp; #define DL_MALLOC(SIZE) ((void *) (malloc_buffer += SIZE, malloc_buffer - SIZE)) /* @@ -130,7 +130,7 @@ unsigned int *_dl_envp; * platforms we may need to increase this to 8, but this is good enough for * now. This is typically called after DL_MALLOC. */ -#define REALIGN() malloc_buffer = (char *) (((unsigned int) malloc_buffer + 3) & ~(3)) +#define REALIGN() malloc_buffer = (char *) (((unsigned long) malloc_buffer + 3) & ~(3)) @@ -161,31 +161,29 @@ void _dl_debug_state() return; } -void _dl_boot(int args); - -void _dl_boot(int args) +void _dl_boot(unsigned long args) { - unsigned int argc; + unsigned long argc; char **argv, **envp; int status; - unsigned int load_addr; - unsigned int *got; - unsigned int *aux_dat; + unsigned long load_addr; + unsigned long *got; + unsigned long *aux_dat; int goof = 0; elfhdr *header; struct elf_resolve *tpnt; struct dyn_elf *rpnt; struct elf_resolve *app_tpnt; - unsigned int brk_addr; - unsigned int dl_data[AT_EGID + 1]; + unsigned long brk_addr; + unsigned long dl_data[AT_EGID + 1]; unsigned char *malloc_buffer, *mmap_zero; int (*_dl_atexit) (void *); - int *lpnt; + unsigned long *lpnt; Elf32_Dyn *dpnt; - unsigned int *hash_addr; + unsigned long *hash_addr; struct r_debug *debug_addr; - unsigned int *chains; + unsigned long *chains; int indx; int _dl_secure; @@ -204,7 +202,7 @@ void _dl_boot(int args) dl_data[AT_UID] = -1; /* check later to see if it is changed */ while (*aux_dat) { - unsigned int *ad1; + unsigned long *ad1; ad1 = aux_dat + 1; if (*aux_dat <= AT_EGID) @@ -282,7 +280,7 @@ void _dl_boot(int args) } app_tpnt->dynamic_info[dpnt->d_tag] = dpnt->d_un.d_val; if (dpnt->d_tag == DT_DEBUG) - dpnt->d_un.d_val = (int) debug_addr; + dpnt->d_un.d_val = (unsigned long) debug_addr; if (dpnt->d_tag == DT_TEXTREL || SVR4_BUGCOMPAT) app_tpnt->dynamic_info[DT_TEXTREL] = 1; dpnt++; @@ -293,7 +291,7 @@ void _dl_boot(int args) /* Get some more of the information that we will need to dynamicly link this module to itself */ - hash_addr = (unsigned int *) (tpnt->dynamic_info[DT_HASH] + load_addr); + hash_addr = (unsigned long *) (tpnt->dynamic_info[DT_HASH] + load_addr); tpnt->nbucket = *hash_addr++; tpnt->nchain = *hash_addr++; tpnt->elf_buckets = hash_addr; @@ -317,7 +315,7 @@ void _dl_boot(int args) _dl_mprotect((void *) (load_addr + (ppnt->p_vaddr & 0xfffff000)), (ppnt->p_vaddr & 0xfff) + - (unsigned int) ppnt->p_filesz, + (unsigned long) ppnt->p_filesz, PROT_READ | PROT_WRITE | PROT_EXEC); } } @@ -329,7 +327,7 @@ void _dl_boot(int args) if (ppnt->p_type == PT_LOAD && !(ppnt->p_flags & PF_W)) _dl_mprotect((void *) (ppnt->p_vaddr & 0xfffff000), (ppnt->p_vaddr & 0xfff) + - (unsigned int) ppnt->p_filesz, + (unsigned long) ppnt->p_filesz, PROT_READ | PROT_WRITE | PROT_EXEC); } } @@ -342,10 +340,10 @@ void _dl_boot(int args) for (indx = 0; indx < 2; indx++) { int i; ELF_RELOC *rpnt; - unsigned int *reloc_addr; - unsigned int symbol_addr; + unsigned long *reloc_addr; + unsigned long symbol_addr; int symtab_index; - unsigned int rel_addr, rel_size; + unsigned long rel_addr, rel_size; #ifdef ELF_USES_RELOCA @@ -371,7 +369,7 @@ void _dl_boot(int args) /* Now parse the relocation information */ rpnt = (ELF_RELOC *) (rel_addr + load_addr); for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) { - reloc_addr = (int *) (load_addr + (int) rpnt->r_offset); + reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset); symtab_index = ELF32_R_SYM(rpnt->r_info); symbol_addr = 0; if (symtab_index) { @@ -430,7 +428,7 @@ void _dl_boot(int args) fixed up by now. Still no function calls outside of this library , since the dynamic resolver is not yet ready. */ - lpnt = (int *) (tpnt->dynamic_info[DT_PLTGOT] + load_addr); + lpnt = (unsigned long *) (tpnt->dynamic_info[DT_PLTGOT] + load_addr); INIT_GOT(lpnt, tpnt); /* OK, this was a big step, now we need to scan all of the user images @@ -494,7 +492,7 @@ void _dl_boot(int args) rpnt->dyn = _dl_loaded_modules; app_tpnt->usage_count++; app_tpnt->symbol_scope = _dl_symbol_tables; - lpnt = (int *) (app_tpnt->dynamic_info[DT_PLTGOT]); + lpnt = (unsigned long *) (app_tpnt->dynamic_info[DT_PLTGOT]); #ifdef ALLOW_ZERO_PLTGOT if (lpnt) #endif @@ -812,14 +810,14 @@ void _dl_boot(int args) up each symbol individually. */ - _dl_brkp = (unsigned int *) _dl_find_hash("___brk_addr", NULL, 1, NULL, 0); + _dl_brkp = (unsigned long *) _dl_find_hash("___brk_addr", NULL, 1, NULL, 0); if (_dl_brkp) *_dl_brkp = brk_addr; _dl_envp = - (unsigned int *) _dl_find_hash("__environ", NULL, 1, NULL, 0); + (unsigned long *) _dl_find_hash("__environ", NULL, 1, NULL, 0); if (_dl_envp) - *_dl_envp = (unsigned int) envp; + *_dl_envp = (unsigned long) envp; { int i; @@ -834,7 +832,7 @@ void _dl_boot(int args) _dl_mprotect((void *) (tpnt->loadaddr + (ppnt->p_vaddr & 0xfffff000)), (ppnt->p_vaddr & 0xfff) + - (unsigned int) ppnt->p_filesz, + (unsigned long) ppnt->p_filesz, LXFLAGS(ppnt->p_flags)); } @@ -974,7 +972,7 @@ void *_dl_malloc(int size) * Align memory to 4 byte boundary. Some platforms require this, others * simply get better performance. */ - _dl_malloc_addr = (char *) (((unsigned int) _dl_malloc_addr + 3) & ~(3)); + _dl_malloc_addr = (char *) (((unsigned long) _dl_malloc_addr + 3) & ~(3)); return retval; } diff --git a/ldso/ldso/linuxelf.h b/ldso/ldso/linuxelf.h index bab9cd47a..3bbcfa7c9 100644 --- a/ldso/ldso/linuxelf.h +++ b/ldso/ldso/linuxelf.h @@ -11,16 +11,16 @@ extern void * _dl_malloc(int size); extern int _dl_map_cache(void); extern int _dl_unmap_cache(void); int _dl_copy_fixups(struct dyn_elf * tpnt); -extern int _dl_parse_relocation_information(struct elf_resolve * tpnt, int rel_addr, - int rel_size, int type); -extern void _dl_parse_lazy_relocation_information(struct elf_resolve * tpnt, int rel_addr, - int rel_size, int type); +extern int _dl_parse_relocation_information(struct elf_resolve * tpnt, unsigned long rel_addr, + unsigned long rel_size, int type); +extern void _dl_parse_lazy_relocation_information(struct elf_resolve * tpnt, unsigned long rel_addr, + unsigned long rel_size, int type); extern struct elf_resolve * _dl_load_shared_library(int secure, struct elf_resolve *, char * libname); extern struct elf_resolve * _dl_load_elf_shared_library(int secure, - char * libname, int); -extern int _dl_parse_copy_information(struct dyn_elf * rpnt, int rel_addr, - int rel_size, int type); + char * libname, int flag); +extern int _dl_parse_copy_information(struct dyn_elf * rpnt, unsigned long rel_addr, + unsigned long rel_size, int type); extern int _dl_linux_resolve(void); #define ELF_CLASS ELFCLASS32 diff --git a/ldso/ldso/readelflib1.c b/ldso/ldso/readelflib1.c index d9b900809..4689e51f2 100644 --- a/ldso/ldso/readelflib1.c +++ b/ldso/ldso/readelflib1.c @@ -121,8 +121,8 @@ int _dl_unmap_cache(void) * Used to return error codes back to dlopen et. al. */ -unsigned int _dl_error_number; -unsigned int _dl_internal_error_number; +unsigned long _dl_error_number; +unsigned long _dl_internal_error_number; struct elf_resolve *_dl_load_shared_library(int secure, struct elf_resolve *tpnt, char *full_libname) @@ -166,7 +166,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, if (tpnt->libtype == elf_executable) { pnt1 = (char *) tpnt->dynamic_info[DT_RPATH]; if (pnt1) { - pnt1 += (unsigned int) tpnt->loadaddr + + pnt1 += (unsigned long) tpnt->loadaddr + tpnt->dynamic_info[DT_STRTAB]; while (*pnt1) { pnt2 = mylibname; @@ -314,8 +314,8 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, char *libname, int flag) { elfhdr *epnt; - unsigned int dynamic_addr = 0; - unsigned int dynamic_size = 0; + unsigned long dynamic_addr = 0; + unsigned long dynamic_size = 0; Elf32_Dyn *dpnt; struct elf_resolve *tpnt; elf_phdr *ppnt; @@ -323,10 +323,10 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, char *status; int flags; char header[4096]; - int dynamic_info[24]; + unsigned long dynamic_info[24]; int *lpnt; - unsigned int libaddr; - unsigned int minvma = 0xffffffff, maxvma = 0; + unsigned long libaddr; + unsigned long minvma = 0xffffffff, maxvma = 0; int i; int infile; @@ -410,7 +410,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, if (piclib && ppnt->p_vaddr < minvma) { minvma = ppnt->p_vaddr; } - if (((unsigned int) ppnt->p_vaddr + ppnt->p_memsz) > maxvma) { + if (((unsigned long) ppnt->p_vaddr + ppnt->p_memsz) > maxvma) { maxvma = ppnt->p_vaddr + ppnt->p_memsz; } } @@ -432,7 +432,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, _dl_close(infile); return NULL; }; - libaddr = (unsigned int) status; + libaddr = (unsigned long) status; flags |= MAP_FIXED; /* Get the memory to store the library */ @@ -450,7 +450,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, if (ppnt->p_flags & PF_W) { - unsigned int map_size; + unsigned long map_size; char *cpnt; status = (char *) _dl_mmap((char *) ((piclib ? libaddr : 0) + @@ -470,7 +470,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, /* Pad the last page with zeroes. */ cpnt = (char *) (status + (ppnt->p_vaddr & 0xfff) + ppnt->p_filesz); - while (((unsigned int) cpnt) & 0xfff) + while (((unsigned long) cpnt) & 0xfff) *cpnt++ = 0; /* I am not quite sure if this is completely @@ -499,7 +499,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, }; /* if(libaddr == 0 && piclib) { - libaddr = (unsigned int) status; + libaddr = (unsigned long) status; flags |= MAP_FIXED; }; */ }; @@ -509,7 +509,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, /* For a non-PIC library, the addresses are all absolute */ if (piclib) { - dynamic_addr += (unsigned int) libaddr; + dynamic_addr += (unsigned long) libaddr; } /* @@ -551,7 +551,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, if (ppnt->p_type == PT_LOAD && !(ppnt->p_flags & PF_W)) _dl_mprotect((void *) ((piclib ? libaddr : 0) + (ppnt->p_vaddr & 0xfffff000)), - (ppnt->p_vaddr & 0xfff) + (unsigned int) ppnt->p_filesz, + (ppnt->p_vaddr & 0xfff) + (unsigned long) ppnt->p_filesz, PROT_READ | PROT_WRITE | PROT_EXEC); } } diff --git a/ldso/ldso/syscall.h b/ldso/ldso/syscall.h index 6678e2c74..167e2ed15 100644 --- a/ldso/ldso/syscall.h +++ b/ldso/ldso/syscall.h @@ -37,7 +37,14 @@ static inline void * _dl_mmap(void * addr, unsigned long size, int prot, #endif #define _dl_mmap_check_error(__res) \ (((int)__res) < 0 && ((int)__res) >= -_dl_MAX_ERRNO) - +#include // For MAP_ANONYMOUS -- differs between platforms +#ifndef MAP_ANONYMOUS +#ifdef __sparc__ +#define MAP_ANONYMOUS 0x20 +#else +#error MAP_ANONYMOUS not defined and suplementary value not known +#endif +#endif #define __NR__dl_open __NR_open -- cgit v1.2.3