summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>2006-05-13 05:59:29 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>2006-05-13 05:59:29 +0000
commit085c52ceb73cd10b56d00a14fdd8cd4dabad2630 (patch)
tree850192d2a4b5cd8412cd76239036acd40b670e17
parent0bd0beffa50be8c06045a211ae2fcc25a500a197 (diff)
spacing
-rw-r--r--libexec/ld.so/ldconfig/debug.c28
-rw-r--r--libexec/ld.so/ldconfig/ld.h4
-rw-r--r--libexec/ld.so/ldconfig/prebind.c83
-rw-r--r--libexec/ld.so/ldconfig/prebind_struct.h56
4 files changed, 85 insertions, 86 deletions
diff --git a/libexec/ld.so/ldconfig/debug.c b/libexec/ld.so/ldconfig/debug.c
index c768826e4b8..34d33daf7e9 100644
--- a/libexec/ld.so/ldconfig/debug.c
+++ b/libexec/ld.so/ldconfig/debug.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: debug.c,v 1.1 2006/05/12 23:20:52 deraadt Exp $ */
+/* $OpenBSD: debug.c,v 1.2 2006/05/13 05:58:42 deraadt Exp $ */
/*
* Copyright (c) 2006 Dale Rahn <drahn@dalerahn.com>
*
@@ -31,7 +31,9 @@
#include "resolve.h"
#include "link.h"
#include "sod.h"
+#ifndef __mips64
#include "machine/reloc.h"
+#endif
#include "prebind.h"
#include "prebind_struct.h"
@@ -40,12 +42,12 @@ void
dump_info(struct elf_object *object)
{
int numrel, numrela, i;
- const Elf_Sym *symt;
- const char *strt;
+ const Elf_Sym *symt;
+ const char *strt;
Elf_Word *needed_list;
symt = object->dyn.symtab;
- strt = object->dyn.strtab;
+ strt = object->dyn.strtab;
for (i = 0; i < object->nchains; i++) {
const Elf_Sym *sym = symt + i;
@@ -53,13 +55,13 @@ dump_info(struct elf_object *object)
switch (ELF_ST_TYPE(sym->st_info)) {
case STT_FUNC:
- type = "func";
+ type = "func";
break;
case STT_OBJECT:
- type = "object";
+ type = "object";
break;
case STT_NOTYPE:
- type = "notype";
+ type = "notype";
break;
default:
type = "UNKNOWN";
@@ -69,27 +71,27 @@ dump_info(struct elf_object *object)
type, sym->st_value);
}
- numrel = object->dyn.relsz / sizeof(Elf_Rel);
+ numrel = object->dyn.relsz / sizeof(Elf_Rel);
numrela = object->dyn.relasz / sizeof(Elf_RelA);
-
printf("numrel %d numrela %d\n", numrel, numrela);
printf("rel relocations:\n");
for (i = 0; i < numrel ; i++) {
- Elf_Rel *rel = object->dyn.rel;
+ Elf_Rel *rel = object->dyn.rel;
+
printf("%d: %x sym %x type %d\n", i, rel[i].r_offset,
ELF_R_SYM(rel[i].r_info), ELF_R_TYPE(rel[i].r_info));
}
printf("rela relocations:\n");
for (i = 0; i < numrela ; i++) {
- Elf_RelA *rela = object->dyn.rela;
+ Elf_RelA *rela = object->dyn.rela;
+
printf("%d: %x sym %x type %d\n", i, rela[i].r_offset,
ELF_R_SYM(rela[i].r_info), ELF_R_TYPE(rela[i].r_info));
}
needed_list = (Elf_Addr *)object->dyn.needed;
- for (i = 0; needed_list[i] != NULL; i++) {
+ for (i = 0; needed_list[i] != NULL; i++)
printf("NEEDED %s\n", needed_list[i] + strt);
- }
}
#endif
diff --git a/libexec/ld.so/ldconfig/ld.h b/libexec/ld.so/ldconfig/ld.h
index 1d60f0b6f64..868d86ec260 100644
--- a/libexec/ld.so/ldconfig/ld.h
+++ b/libexec/ld.so/ldconfig/ld.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: ld.h,v 1.6 2002/05/24 03:44:37 deraadt Exp $ */
+/* $OpenBSD: ld.h,v 1.7 2006/05/13 05:59:28 deraadt Exp $ */
/*
* Header file to make code compatible with ELF version
* ldconfig was taken from the a.out ld.
@@ -7,9 +7,11 @@
extern int n_search_dirs;
extern char **search_dirs;
+
char *xstrdup(const char *);
void *xmalloc(size_t);
void *xrealloc(void *, size_t);
+void *xcalloc(size_t, size_t);
char *concat(const char *, const char *, const char *);
void add_search_dir(char *name);
diff --git a/libexec/ld.so/ldconfig/prebind.c b/libexec/ld.so/ldconfig/prebind.c
index 6d7af426cb9..3d32a25a8e0 100644
--- a/libexec/ld.so/ldconfig/prebind.c
+++ b/libexec/ld.so/ldconfig/prebind.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: prebind.c,v 1.1 2006/05/12 23:20:52 deraadt Exp $ */
+/* $OpenBSD: prebind.c,v 1.2 2006/05/13 05:59:28 deraadt Exp $ */
/*
* Copyright (c) 2006 Dale Rahn <drahn@dalerahn.com>
*
@@ -32,10 +32,11 @@
#include "resolve.h"
#include "link.h"
#include "sod.h"
-#ifndef __mips64__
+#ifndef __mips64
#include "machine/reloc.h"
#endif
#include "prebind.h"
+#include "ld.h"
/* seems to make sense to limit how big of file can be dealt with */
#define MAX_FILE_SIZE (512 * 1024 * 1024)
@@ -58,7 +59,7 @@ char *shstrtab;
#ifdef __i386__
#define RELOC_JMP_SLOT RELOC_JUMP_SLOT
#endif
-#ifdef __mips64__
+#ifdef __mips64
#define RELOC_JMP_SLOT 0 /* XXX mips64 doesnt have PLT reloc */
#endif
/* powerpc uses RELOC_JMP_SLOT */
@@ -118,37 +119,35 @@ void elf_reloc(struct elf_object *object);
struct elf_object * elf_lookup_object(const char *name);
struct elf_object * elf_lookup_object_devino(dev_t dev, ino_t inode,
- int objtype);
-void elf_free_curbin_list(struct elf_object *obj);
-void elf_resolve_curbin(void);
+ int objtype);
+void elf_free_curbin_list(struct elf_object *obj);
+void elf_resolve_curbin(void);
struct proglist *elf_newbin(void);
-void elf_sum_reloc();
-int elf_prep_lib_prebind(struct elf_object *object);
-int elf_prep_bin_prebind(struct proglist *pl);
-void add_fixup_prog(struct elf_object *prog, struct elf_object *obj, int idx,
- const struct elf_object *ref_obj, const Elf_Sym *ref_sym, int flag);
-void add_fixup_oldprog(struct elf_object *prog, struct elf_object *obj, int idx,
- const struct elf_object *ref_obj, const Elf_Sym *ref_sym, int flag);
+void elf_sum_reloc();
+int elf_prep_lib_prebind(struct elf_object *object);
+int elf_prep_bin_prebind(struct proglist *pl);
+void add_fixup_prog(struct elf_object *prog, struct elf_object *obj, int idx,
+ const struct elf_object *ref_obj, const Elf_Sym *ref_sym, int flag);
+void add_fixup_oldprog(struct elf_object *prog, struct elf_object *obj, int idx,
+ const struct elf_object *ref_obj, const Elf_Sym *ref_sym, int flag);
-void elf_dump_footer(struct prebind_footer *footer);
+void elf_dump_footer(struct prebind_footer *footer);
-void elf_fixup_prog_load(int fd, struct prebind_footer *footer,
- struct elf_object *object);
-void elf_clear_prog_load(int fd, struct elf_object *object);
+void elf_fixup_prog_load(int fd, struct prebind_footer *footer,
+ struct elf_object *object);
+void elf_clear_prog_load(int fd, struct elf_object *object);
-void
-elf_find_symbol_rel(const char *s, struct elf_object *object,
- Elf_Rel *rel, struct symcache_noflag *symcache,
- struct symcache_noflag *pltsymcache);
+void elf_find_symbol_rel(const char *s, struct elf_object *object,
+ Elf_Rel *rel, struct symcache_noflag *symcache,
+ struct symcache_noflag *pltsymcache);
-void
-elf_find_symbol_rela(const char *s, struct elf_object *object,
- Elf_RelA *rela, struct symcache_noflag *symcache,
- struct symcache_noflag *pltsymcache);
+void elf_find_symbol_rela(const char *s, struct elf_object *object,
+ Elf_RelA *rela, struct symcache_noflag *symcache,
+ struct symcache_noflag *pltsymcache);
-int elf_find_symbol_obj(elf_object_t *object, const char *name,
- unsigned long hash, int flags, const Elf_Sym **this,
- const Elf_Sym **weak_sym, elf_object_t **weak_object);
+int elf_find_symbol_obj(elf_object_t *object, const char *name,
+ unsigned long hash, int flags, const Elf_Sym **this,
+ const Elf_Sym **weak_sym, elf_object_t **weak_object);
struct elf_object *load_object;
@@ -341,7 +340,7 @@ load_file(const char *filename, int objtype)
goto done;
}
- if ((ifstat.st_mode & S_IFMT) != S_IFREG)
+ if ((ifstat.st_mode & S_IFMT) != S_IFREG)
goto done;
if (ifstat.st_size < sizeof (Elf_Ehdr))
@@ -469,7 +468,7 @@ elf_load_object(void *pexe, const char *name)
Elf_Ehdr *ehdr;
Elf_Phdr *phdr;
const Elf_Sym *symt;
- const char *strt;
+ const char *strt;
Elf_Addr loff;
Elf_Word *needed_list;
int needed_cnt = 0, i;
@@ -494,7 +493,7 @@ elf_load_object(void *pexe, const char *name)
case PT_INTERP:
/* XXX can only occur in programs */
curbin->interp = strdup((char *)((char *)pexe +
- phdr[i].p_offset));
+ phdr[i].p_offset));
default:
break;
}
@@ -556,7 +555,7 @@ elf_load_object(void *pexe, const char *name)
map_to_virt(phdr, ehdr, loff, &object->Dyn.info[DT_JMPREL]);
symt = object->dyn.symtab;
- strt = object->dyn.strtab;
+ strt = object->dyn.strtab;
{
Elf_Sym *sym;
@@ -884,7 +883,7 @@ insert_sym_objcache(struct elf_object *obj, int idx,
ref_sym, flags);
} else {
add_fixup_oldprog(prog, obj, idx,
- tcache[idx].obj, tcache[idx].sym, flags);
+ tcache[idx].obj, tcache[idx].sym, flags);
tcache[idx].obj = badobj;
tcache[idx].sym = NULL;
add_fixup_prog(prog, obj, idx, ref_obj,
@@ -904,7 +903,7 @@ insert_sym_objcache(struct elf_object *obj, int idx,
void
add_fixup_prog(struct elf_object *prog, struct elf_object *obj, int idx,
- const struct elf_object *ref_obj, const Elf_Sym *ref_sym, int flag)
+ const struct elf_object *ref_obj, const Elf_Sym *ref_sym, int flag)
{
struct proglist *pl;
int i, libidx, cnt;
@@ -953,9 +952,9 @@ add_fixup_prog(struct elf_object *prog, struct elf_object *obj, int idx,
void
add_fixup_oldprog(struct elf_object *prog, struct elf_object *obj, int idx,
- const struct elf_object *ref_obj, const Elf_Sym *ref_sym, int flag)
+ const struct elf_object *ref_obj, const Elf_Sym *ref_sym, int flag)
{
- struct objlist *ol;
+ struct objlist *ol;
TAILQ_FOREACH(ol, &(objarray[obj->dyn.null].inst_list), inst_list) {
if (ol->load_prog == prog) {
@@ -1201,7 +1200,7 @@ elf_reloc(struct elf_object *object)
struct symcache_noflag *symcache;
struct symcache_noflag *pltsymcache;
- numrel = object->dyn.relsz / sizeof(Elf_Rel);
+ numrel = object->dyn.relsz / sizeof(Elf_Rel);
#ifdef DEBUG1
printf("rel relocations: %d\n", numrel);
#endif
@@ -1367,6 +1366,7 @@ void
elf_add_object_curbin_list(struct elf_object *object)
{
struct objlist *ol;
+
ol = xmalloc(sizeof (struct objlist));
ol->object = object;
TAILQ_INSERT_TAIL(&(curbin->curbin_list), ol, list);
@@ -2075,18 +2075,18 @@ elf_load_existing_prebind(struct elf_object *object, int fd)
if (footer.bind_id[0] != BIND_ID0 ||
footer.bind_id[1] != BIND_ID1 ||
footer.bind_id[2] != BIND_ID2 ||
- footer.bind_id[3] != BIND_ID3) {
+ footer.bind_id[3] != BIND_ID3)
return;
- }
- prebind_data = mmap(0, footer.prebind_size, PROT_READ,
- MAP_FILE, fd, footer.prebind_base);
+ prebind_data = mmap(0, footer.prebind_size, PROT_READ,
+ MAP_FILE, fd, footer.prebind_base);
objarray[object->dyn.null].oprebind_data = prebind_data;
objarray[object->dyn.null].id0 = footer.id0;
objarray[object->dyn.null].id1 = footer.id1;
copy_oldsymcache(object->dyn.null, prebind_data);
}
+
void
copy_oldsymcache(int objidx, void *prebind_map)
{
@@ -2137,7 +2137,6 @@ copy_oldsymcache(int objidx, void *prebind_map)
goto done;
/* build idxtolibs */
-
tcache = objarray[objidx].symcache;
symcache = prebind_map + footer->symcache_idx;
diff --git a/libexec/ld.so/ldconfig/prebind_struct.h b/libexec/ld.so/ldconfig/prebind_struct.h
index 42a64bb868d..47fab74a8ad 100644
--- a/libexec/ld.so/ldconfig/prebind_struct.h
+++ b/libexec/ld.so/ldconfig/prebind_struct.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: prebind_struct.h,v 1.1 2006/05/12 23:20:53 deraadt Exp $ */
+/* $OpenBSD: prebind_struct.h,v 1.2 2006/05/13 05:59:28 deraadt Exp $ */
/*
* Copyright (c) 2006 Dale Rahn <drahn@dalerahn.com>
*
@@ -41,7 +41,6 @@ struct proglist {
extern struct proglist *curbin;
extern struct elf_object *load_object;
-
typedef TAILQ_HEAD(, proglist) prog_list_ty;
typedef TAILQ_HEAD(, objlist) obj_list_ty;
@@ -49,41 +48,38 @@ extern obj_list_ty library_list;
extern prog_list_ty prog_list;
/* debug */
-void elf_print_curbin_list(struct proglist *bin);
-void elf_print_prog_list (prog_list_ty *prog_list);
-
+void elf_print_curbin_list(struct proglist *bin);
+void elf_print_prog_list (prog_list_ty *prog_list);
-void elf_add_object_curbin_list(struct elf_object *object);
+void elf_add_object_curbin_list(struct elf_object *object);
-void elf_copy_syms(struct symcache_noflag *tcache,
- struct symcache_noflag *scache, struct elf_object *obj,
- struct elf_object *prog, int nsyms);
-int elf_prep_lib_prebind(struct elf_object *object);
-int elf_prep_bin_prebind(struct proglist *pl);
-void elf_calc_fixups(struct proglist *pl, struct objlist *ol, int libidx);
-int elf_write_lib(struct elf_object *object, struct nameidx *nameidx,
- char *nametab, int nametablen, int numlibs,
- int nfixup, struct fixup **fixup, int *fixupcnt,
- u_int32_t **libmap, int *libmapcnt,
- struct symcachetab *symcachetab, int symcache_cnt,
- struct symcachetab *pltsymcachetab, int pltsymcache_cnt);
+void elf_copy_syms(struct symcache_noflag *tcache,
+ struct symcache_noflag *scache, struct elf_object *obj,
+ struct elf_object *prog, int nsyms);
+int elf_prep_lib_prebind(struct elf_object *object);
+int elf_prep_bin_prebind(struct proglist *pl);
+void elf_calc_fixups(struct proglist *pl, struct objlist *ol, int libidx);
+int elf_write_lib(struct elf_object *object, struct nameidx *nameidx,
+ char *nametab, int nametablen, int numlibs,
+ int nfixup, struct fixup **fixup, int *fixupcnt,
+ u_int32_t **libmap, int *libmapcnt,
+ struct symcachetab *symcachetab, int symcache_cnt,
+ struct symcachetab *pltsymcachetab, int pltsymcache_cnt);
-void dump_symcachetab(struct symcachetab *symcachetab, int symcache_cnt, struct elf_object *object, int id);
-void dump_info(struct elf_object *object);
-void elf_clear_prog_load(int fd, struct elf_object *object);
-void elf_fixup_prog_load(int fd, struct prebind_footer *footer,
- struct elf_object *object);
-void elf_dump_footer(struct prebind_footer *footer);
+void dump_symcachetab(struct symcachetab *symcachetab, int symcache_cnt,
+ struct elf_object *object, int id);
+void dump_info(struct elf_object *object);
+void elf_clear_prog_load(int fd, struct elf_object *object);
+void elf_fixup_prog_load(int fd, struct prebind_footer *footer,
+ struct elf_object *object);
+void elf_dump_footer(struct prebind_footer *footer);
-extern int verbose;
-extern int merge;
+extern int verbose;
+extern int merge;
extern int64_t prebind_blocks;
extern struct elf_object *load_object;
struct elf_object *elf_lookup_object(const char *name);
struct elf_object *load_file(const char *filename, int objtype);
-void elf_load_existing_prebind(struct elf_object *object, int fd);
-
-void *xmalloc(size_t);
-void *xcalloc(size_t,size_t);
+void elf_load_existing_prebind(struct elf_object *object, int fd);