Page MenuHomeFreeBSD

D17153.id49770.diff
No OneTemporary

D17153.id49770.diff

Index: head/libexec/rtld-elf/Makefile
===================================================================
--- head/libexec/rtld-elf/Makefile
+++ head/libexec/rtld-elf/Makefile
@@ -31,7 +31,9 @@
.else
LDFLAGS+= -nostdlib -e .rtld_start
.endif
-WARNS?= 2
+
+NO_WCAST_ALIGN= yes
+WARNS?= 4
INSTALLFLAGS= -C -b
PRECIOUSPROG=
BINDIR= /libexec
@@ -95,3 +97,8 @@
.include <bsd.prog.mk>
${PROG_FULL}: ${VERSION_MAP}
.include <bsd.symver.mk>
+
+.if ${COMPILER_TYPE} == "gcc" && ${COMPILER_VERSION} < 40300
+# Silence -Wshadow false positives in ancient GCC
+CFLAGS+= -Wno-shadow
+.endif
Index: head/libexec/rtld-elf/aarch64/reloc.c
===================================================================
--- head/libexec/rtld-elf/aarch64/reloc.c
+++ head/libexec/rtld-elf/aarch64/reloc.c
@@ -84,7 +84,7 @@
*/
assert(dstobj->mainprog);
- relalim = (const Elf_Rela *)((char *)dstobj->rela +
+ relalim = (const Elf_Rela *)((const char *)dstobj->rela +
dstobj->relasize);
for (rela = dstobj->rela; rela < relalim; rela++) {
if (ELF_R_TYPE(rela->r_info) != R_AARCH64_COPY)
@@ -128,6 +128,8 @@
const Elf_Rela *rela;
};
+int64_t rtld_tlsdesc_handle(struct tls_data *tlsdesc, int flags);
+
static struct tls_data *
reloc_tlsdesc_alloc(Obj_Entry *obj, const Elf_Rela *rela)
{
@@ -205,7 +207,7 @@
const Elf_Rela *relalim;
const Elf_Rela *rela;
- relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize);
+ relalim = (const Elf_Rela *)((const char *)obj->pltrela + obj->pltrelasize);
for (rela = obj->pltrela; rela < relalim; rela++) {
Elf_Addr *where;
@@ -243,7 +245,7 @@
const Elf_Sym *def;
struct tls_data *tlsdesc;
- relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize);
+ relalim = (const Elf_Rela *)((const char *)obj->pltrela + obj->pltrelasize);
for (rela = obj->pltrela; rela < relalim; rela++) {
Elf_Addr *where, target;
@@ -289,7 +291,7 @@
if (!obj->irelative)
return (0);
- relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize);
+ relalim = (const Elf_Rela *)((const char *)obj->pltrela + obj->pltrelasize);
for (rela = obj->pltrela; rela < relalim; rela++) {
if (ELF_R_TYPE(rela->r_info) == R_AARCH64_IRELATIVE) {
ptr = (Elf_Addr *)(obj->relocbase + rela->r_addend);
@@ -316,7 +318,7 @@
if (!obj->gnu_ifunc)
return (0);
- relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize);
+ relalim = (const Elf_Rela *)((const char *)obj->pltrela + obj->pltrelasize);
for (rela = obj->pltrela; rela < relalim; rela++) {
if (ELF_R_TYPE(rela->r_info) == R_AARCH64_JUMP_SLOT) {
where = (Elf_Addr *)(obj->relocbase + rela->r_offset);
@@ -338,8 +340,9 @@
}
Elf_Addr
-reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const Obj_Entry *defobj,
- const Obj_Entry *obj, const Elf_Rel *rel)
+reloc_jmpslot(Elf_Addr *where, Elf_Addr target,
+ const Obj_Entry *defobj __unused, const Obj_Entry *obj __unused,
+ const Elf_Rel *rel)
{
assert(ELF_R_TYPE(rel->r_info) == R_AARCH64_JUMP_SLOT ||
@@ -386,7 +389,7 @@
cache = calloc(obj->dynsymcount, sizeof(SymCache));
/* No need to check for NULL here */
- relalim = (const Elf_Rela *)((caddr_t)obj->rela + obj->relasize);
+ relalim = (const Elf_Rela *)((const char *)obj->rela + obj->relasize);
for (rela = obj->rela; rela < relalim; rela++) {
/*
* First, resolve symbol for relocations which
@@ -471,7 +474,8 @@
* error.
*/
if (!defobj->tls_done) {
- if (!allocate_tls_offset((Obj_Entry*) defobj)) {
+ if (!allocate_tls_offset(
+ __DECONST(Obj_Entry *, defobj))) {
_rtld_error(
"%s: No space available for static "
"Thread Local Storage", obj->path);
Index: head/libexec/rtld-elf/amd64/reloc.c
===================================================================
--- head/libexec/rtld-elf/amd64/reloc.c
+++ head/libexec/rtld-elf/amd64/reloc.c
@@ -67,7 +67,7 @@
assert(dstobj->mainprog); /* COPY relocations are invalid elsewhere */
- relalim = (const Elf_Rela *) ((caddr_t) dstobj->rela + dstobj->relasize);
+ relalim = (const Elf_Rela *)((const char *) dstobj->rela + dstobj->relasize);
for (rela = dstobj->rela; rela < relalim; rela++) {
if (ELF_R_TYPE(rela->r_info) == R_X86_64_COPY) {
void *dstaddr;
@@ -80,7 +80,7 @@
SymLook req;
int res;
- dstaddr = (void *) (dstobj->relocbase + rela->r_offset);
+ dstaddr = (void *)(dstobj->relocbase + rela->r_offset);
dstsym = dstobj->symtab + ELF_R_SYM(rela->r_info);
name = dstobj->strtab + dstsym->st_name;
size = dstsym->st_size;
@@ -104,7 +104,7 @@
return -1;
}
- srcaddr = (const void *) (defobj->relocbase + srcsym->st_value);
+ srcaddr = (const void *)(defobj->relocbase + srcsym->st_value);
memcpy(dstaddr, srcaddr, size);
}
}
@@ -147,7 +147,7 @@
} else
cache = NULL;
- relalim = (const Elf_Rela *)((caddr_t)obj->rela + obj->relasize);
+ relalim = (const Elf_Rela *)((const char*)obj->rela + obj->relasize);
for (rela = obj->rela; rela < relalim; rela++) {
/*
* First, resolve symbol for relocations which
@@ -254,7 +254,8 @@
* of space, we generate an error.
*/
if (!defobj->tls_done) {
- if (!allocate_tls_offset((Obj_Entry*) defobj)) {
+ if (!allocate_tls_offset(
+ __DECONST(Obj_Entry *, defobj))) {
_rtld_error("%s: No space available "
"for static Thread Local Storage",
obj->path);
@@ -274,7 +275,8 @@
* of space, we generate an error.
*/
if (!defobj->tls_done) {
- if (!allocate_tls_offset((Obj_Entry*) defobj)) {
+ if (!allocate_tls_offset(
+ __DECONST(Obj_Entry *, defobj))) {
_rtld_error("%s: No space available "
"for static Thread Local Storage",
obj->path);
@@ -322,7 +324,7 @@
const Elf_Rela *relalim;
const Elf_Rela *rela;
- relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize);
+ relalim = (const Elf_Rela *)((const char *)obj->pltrela + obj->pltrelasize);
for (rela = obj->pltrela; rela < relalim; rela++) {
Elf_Addr *where;
@@ -355,7 +357,7 @@
if (obj->jmpslots_done)
return 0;
- relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize);
+ relalim = (const Elf_Rela *)((const char *)obj->pltrela + obj->pltrelasize);
for (rela = obj->pltrela; rela < relalim; rela++) {
Elf_Addr *where, target;
const Elf_Sym *def;
@@ -392,8 +394,9 @@
/* Fixup the jump slot at "where" to transfer control to "target". */
Elf_Addr
reloc_jmpslot(Elf_Addr *where, Elf_Addr target,
- const struct Struct_Obj_Entry *obj, const struct Struct_Obj_Entry *refobj,
- const Elf_Rel *rel)
+ const struct Struct_Obj_Entry *obj __unused,
+ const struct Struct_Obj_Entry *refobj __unused,
+ const Elf_Rel *rel __unused)
{
#ifdef dbg
dbg("reloc_jmpslot: *%p = %p", where, (void *)target);
@@ -411,7 +414,7 @@
if (!obj->irelative)
return (0);
- relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize);
+ relalim = (const Elf_Rela *)((const char *)obj->pltrela + obj->pltrelasize);
for (rela = obj->pltrela; rela < relalim; rela++) {
Elf_Addr *where, target, *ptr;
@@ -441,7 +444,7 @@
if (!obj->gnu_ifunc)
return (0);
- relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize);
+ relalim = (const Elf_Rela *)((const char *)obj->pltrela + obj->pltrelasize);
for (rela = obj->pltrela; rela < relalim; rela++) {
Elf_Addr *where, target;
const Elf_Sym *def;
Index: head/libexec/rtld-elf/arm/reloc.c
===================================================================
--- head/libexec/rtld-elf/arm/reloc.c
+++ head/libexec/rtld-elf/arm/reloc.c
@@ -75,7 +75,7 @@
assert(dstobj->mainprog); /* COPY relocations are invalid elsewhere */
- rellim = (const Elf_Rel *) ((caddr_t) dstobj->rel + dstobj->relsize);
+ rellim = (const Elf_Rel *)((const char *) dstobj->rel + dstobj->relsize);
for (rel = dstobj->rel; rel < rellim; rel++) {
if (ELF_R_TYPE(rel->r_info) == R_ARM_COPY) {
void *dstaddr;
@@ -88,7 +88,7 @@
SymLook req;
int res;
- dstaddr = (void *) (dstobj->relocbase + rel->r_offset);
+ dstaddr = (void *)(dstobj->relocbase + rel->r_offset);
dstsym = dstobj->symtab + ELF_R_SYM(rel->r_info);
name = dstobj->strtab + dstsym->st_name;
size = dstsym->st_size;
@@ -125,8 +125,6 @@
void _rtld_bind_start(void);
void _rtld_relocate_nonplt_self(Elf_Dyn *, Elf_Addr);
-int open();
-int _open();
void
_rtld_relocate_nonplt_self(Elf_Dyn *dynp, Elf_Addr relocbase)
{
@@ -145,7 +143,7 @@
break;
}
}
- rellim = (const Elf_Rel *)((caddr_t)rel + relsz);
+ rellim = (const Elf_Rel *)((const char *)rel + relsz);
size = (rellim - 1)->r_offset - rel->r_offset;
for (; rel < rellim; rel++) {
where = (Elf_Addr *)(relocbase + rel->r_offset);
@@ -375,7 +373,7 @@
cache = calloc(obj->dynsymcount, sizeof(SymCache));
/* No need to check for NULL here */
- rellim = (const Elf_Rel *)((caddr_t)obj->rel + obj->relsize);
+ rellim = (const Elf_Rel *)((const char *)obj->rel + obj->relsize);
for (rel = obj->rel; rel < rellim; rel++) {
if (reloc_nonplt_object(obj, rel, cache, flags, lockstate) < 0)
goto done;
@@ -396,7 +394,7 @@
const Elf_Rel *rellim;
const Elf_Rel *rel;
- rellim = (const Elf_Rel *)((char *)obj->pltrel +
+ rellim = (const Elf_Rel *)((const char *)obj->pltrel +
obj->pltrelsize);
for (rel = obj->pltrel; rel < rellim; rel++) {
Elf_Addr *where;
@@ -423,7 +421,7 @@
Elf_Addr *where;
Elf_Addr target;
- rellim = (const Elf_Rel *)((char *)obj->pltrel + obj->pltrelsize);
+ rellim = (const Elf_Rel *)((const char *)obj->pltrel + obj->pltrelsize);
for (rel = obj->pltrel; rel < rellim; rel++) {
assert(ELF_R_TYPE(rel->r_info) == R_ARM_JUMP_SLOT);
where = (Elf_Addr *)(obj->relocbase + rel->r_offset);
@@ -445,7 +443,8 @@
}
int
-reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate)
+reloc_iresolve(Obj_Entry *obj __unused,
+ struct Struct_RtldLockState *lockstate __unused)
{
/* XXX not implemented */
@@ -453,8 +452,8 @@
}
int
-reloc_gnu_ifunc(Obj_Entry *obj, int flags,
- struct Struct_RtldLockState *lockstate)
+reloc_gnu_ifunc(Obj_Entry *obj __unused, int flags __unused,
+ struct Struct_RtldLockState *lockstate __unused)
{
/* XXX not implemented */
@@ -462,8 +461,9 @@
}
Elf_Addr
-reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const Obj_Entry *defobj,
- const Obj_Entry *obj, const Elf_Rel *rel)
+reloc_jmpslot(Elf_Addr *where, Elf_Addr target,
+ const Obj_Entry *defobj __unused, const Obj_Entry *obj __unused,
+ const Elf_Rel *rel)
{
assert(ELF_R_TYPE(rel->r_info) == R_ARM_JUMP_SLOT);
Index: head/libexec/rtld-elf/i386/reloc.c
===================================================================
--- head/libexec/rtld-elf/i386/reloc.c
+++ head/libexec/rtld-elf/i386/reloc.c
@@ -67,7 +67,7 @@
assert(dstobj->mainprog); /* COPY relocations are invalid elsewhere */
- rellim = (const Elf_Rel *) ((caddr_t) dstobj->rel + dstobj->relsize);
+ rellim = (const Elf_Rel *)((const char *)dstobj->rel + dstobj->relsize);
for (rel = dstobj->rel; rel < rellim; rel++) {
if (ELF_R_TYPE(rel->r_info) == R_386_COPY) {
void *dstaddr;
@@ -80,7 +80,7 @@
SymLook req;
int res;
- dstaddr = (void *) (dstobj->relocbase + rel->r_offset);
+ dstaddr = (void *)(dstobj->relocbase + rel->r_offset);
dstsym = dstobj->symtab + ELF_R_SYM(rel->r_info);
name = dstobj->strtab + dstsym->st_name;
size = dstsym->st_size;
@@ -104,7 +104,7 @@
return -1;
}
- srcaddr = (const void *) (defobj->relocbase + srcsym->st_value);
+ srcaddr = (const void *)(defobj->relocbase + srcsym->st_value);
memcpy(dstaddr, srcaddr, size);
}
}
@@ -146,7 +146,7 @@
} else
cache = NULL;
- rellim = (const Elf_Rel *)((caddr_t) obj->rel + obj->relsize);
+ rellim = (const Elf_Rel *)((const char *)obj->rel + obj->relsize);
for (rel = obj->rel; rel < rellim; rel++) {
switch (ELF_R_TYPE(rel->r_info)) {
case R_386_32:
@@ -239,7 +239,8 @@
* of space, we generate an error.
*/
if (!defobj->tls_done) {
- if (!allocate_tls_offset((Obj_Entry*) defobj)) {
+ if (!allocate_tls_offset(
+ __DECONST(Obj_Entry *, defobj))) {
_rtld_error("%s: No space available "
"for static Thread Local Storage",
obj->path);
@@ -278,7 +279,7 @@
const Elf_Rel *rellim;
const Elf_Rel *rel;
- rellim = (const Elf_Rel *)((char *)obj->pltrel + obj->pltrelsize);
+ rellim = (const Elf_Rel *)((const char *)obj->pltrel + obj->pltrelsize);
for (rel = obj->pltrel; rel < rellim; rel++) {
Elf_Addr *where/*, val*/;
@@ -311,7 +312,7 @@
if (obj->jmpslots_done)
return 0;
- rellim = (const Elf_Rel *)((char *)obj->pltrel + obj->pltrelsize);
+ rellim = (const Elf_Rel *)((const char *)obj->pltrel + obj->pltrelsize);
for (rel = obj->pltrel; rel < rellim; rel++) {
Elf_Addr *where, target;
const Elf_Sym *def;
@@ -349,8 +350,8 @@
/* Fixup the jump slot at "where" to transfer control to "target". */
Elf_Addr
reloc_jmpslot(Elf_Addr *where, Elf_Addr target,
- const struct Struct_Obj_Entry *obj, const struct Struct_Obj_Entry *refobj,
- const Elf_Rel *rel)
+ const Obj_Entry *obj __unused, const Obj_Entry *refobj __unused,
+ const Elf_Rel *rel __unused)
{
#ifdef dbg
dbg("reloc_jmpslot: *%p = %p", where, (void *)target);
@@ -369,7 +370,7 @@
if (!obj->irelative)
return (0);
- rellim = (const Elf_Rel *)((char *)obj->pltrel + obj->pltrelsize);
+ rellim = (const Elf_Rel *)((const char *)obj->pltrel + obj->pltrelsize);
for (rel = obj->pltrel; rel < rellim; rel++) {
switch (ELF_R_TYPE(rel->r_info)) {
case R_386_IRELATIVE:
@@ -393,7 +394,7 @@
if (!obj->gnu_ifunc)
return (0);
- rellim = (const Elf_Rel *)((char *)obj->pltrel + obj->pltrelsize);
+ rellim = (const Elf_Rel *)((const char *)obj->pltrel + obj->pltrelsize);
for (rel = obj->pltrel; rel < rellim; rel++) {
Elf_Addr *where, target;
const Elf_Sym *def;
Index: head/libexec/rtld-elf/i386/rtld_machdep.h
===================================================================
--- head/libexec/rtld-elf/i386/rtld_machdep.h
+++ head/libexec/rtld-elf/i386/rtld_machdep.h
@@ -58,7 +58,7 @@
extern uint32_t cpu_stdext_feature;
extern uint32_t cpu_stdext_feature2;
#define call_ifunc_resolver(ptr) \
- (((Elf_Addr (*)(uint32_t, uint32_t, uint32_t, uint32_t))ptr)( \
+ (((Elf_Addr (*)(uint32_t, uint32_t, uint32_t, uint32_t))(ptr))( \
cpu_feature, cpu_feature2, cpu_stdext_feature, cpu_stdext_feature2))
#define round(size, align) \
Index: head/libexec/rtld-elf/libmap.c
===================================================================
--- head/libexec/rtld-elf/libmap.c
+++ head/libexec/rtld-elf/libmap.c
@@ -44,8 +44,8 @@
static int lm_count;
static void lmc_parse(char *, size_t);
-static void lmc_parse_file(char *);
-static void lmc_parse_dir(char *);
+static void lmc_parse_file(const char *);
+static void lmc_parse_dir(const char *);
static void lm_add(const char *, const char *, const char *);
static void lm_free(struct lm_list *);
static char *lml_find(struct lm_list *, const char *);
@@ -96,7 +96,7 @@
}
static void
-lmc_parse_file(char *path)
+lmc_parse_file(const char *path)
{
struct lmc *p;
char *lm_map;
@@ -149,7 +149,7 @@
}
static void
-lmc_parse_dir(char *idir)
+lmc_parse_dir(const char *idir)
{
DIR *d;
struct dirent *dp;
Index: head/libexec/rtld-elf/malloc.c
===================================================================
--- head/libexec/rtld-elf/malloc.c
+++ head/libexec/rtld-elf/malloc.c
@@ -154,13 +154,12 @@
extern size_t *pagesizes;
void *
-malloc(nbytes)
- size_t nbytes;
+malloc(size_t nbytes)
{
union overhead *op;
int bucket;
- size_t n;
- unsigned amt;
+ ssize_t n;
+ size_t amt;
/*
* First time malloc is called, setup page size and
Index: head/libexec/rtld-elf/map_object.c
===================================================================
--- head/libexec/rtld-elf/map_object.c
+++ head/libexec/rtld-elf/map_object.c
@@ -104,7 +104,7 @@
*
* We expect that the loadable segments are ordered by load address.
*/
- phdr = (Elf_Phdr *) ((char *)hdr + hdr->e_phoff);
+ phdr = (Elf_Phdr *)((char *)hdr + hdr->e_phoff);
phsize = hdr->e_phnum * sizeof (phdr[0]);
phlimit = phdr + hdr->e_phnum;
nsegs = -1;
@@ -289,11 +289,11 @@
obj->textsize = text_end - base_vaddr;
obj->vaddrbase = base_vaddr;
obj->relocbase = mapbase - base_vaddr;
- obj->dynamic = (const Elf_Dyn *) (obj->relocbase + phdyn->p_vaddr);
+ obj->dynamic = (const Elf_Dyn *)(obj->relocbase + phdyn->p_vaddr);
if (hdr->e_entry != 0)
- obj->entry = (caddr_t) (obj->relocbase + hdr->e_entry);
+ obj->entry = (caddr_t)(obj->relocbase + hdr->e_entry);
if (phdr_vaddr != 0) {
- obj->phdr = (const Elf_Phdr *) (obj->relocbase + phdr_vaddr);
+ obj->phdr = (const Elf_Phdr *)(obj->relocbase + phdr_vaddr);
} else {
obj->phdr = malloc(phsize);
if (obj->phdr == NULL) {
@@ -301,12 +301,12 @@
_rtld_error("%s: cannot allocate program header", path);
goto error1;
}
- memcpy((char *)obj->phdr, (char *)hdr + hdr->e_phoff, phsize);
+ memcpy(__DECONST(char *, obj->phdr), (char *)hdr + hdr->e_phoff, phsize);
obj->phdr_alloc = true;
}
obj->phsize = phsize;
if (phinterp != NULL)
- obj->interp = (const char *) (obj->relocbase + phinterp->p_vaddr);
+ obj->interp = (const char *)(obj->relocbase + phinterp->p_vaddr);
if (phtls != NULL) {
tls_dtv_generation++;
obj->tlsindex = ++tls_max_index;
@@ -430,13 +430,13 @@
if (obj->origin_path)
free(obj->origin_path);
if (obj->z_origin)
- free(obj->rpath);
+ free(__DECONST(void*, obj->rpath));
if (obj->priv)
free(obj->priv);
if (obj->path)
free(obj->path);
if (obj->phdr_alloc)
- free((void *)obj->phdr);
+ free(__DECONST(void *, obj->phdr));
free(obj);
}
Index: head/libexec/rtld-elf/mips/reloc.c
===================================================================
--- head/libexec/rtld-elf/mips/reloc.c
+++ head/libexec/rtld-elf/mips/reloc.c
@@ -126,7 +126,7 @@
*/
assert(dstobj->mainprog);
- rellim = (const Elf_Rel *)((caddr_t)dstobj->rel + dstobj->relsize);
+ rellim = (const Elf_Rel *)((const char *)dstobj->rel + dstobj->relsize);
for (rel = dstobj->rel; rel < rellim; rel++) {
if (ELF_R_TYPE(rel->r_info) != R_MIPS_COPY)
continue;
@@ -265,7 +265,7 @@
++got;
}
- rellim = (const Elf_Rel *)((caddr_t)rel + relsz);
+ rellim = (const Elf_Rel *)((const char *)rel + relsz);
for (; rel < rellim; rel++) {
Elf_Word r_symndx, r_type;
@@ -469,7 +469,7 @@
}
got = obj->pltgot;
- rellim = (const Elf_Rel *)((caddr_t)obj->rel + obj->relsize);
+ rellim = (const Elf_Rel *)((const char *)obj->rel + obj->relsize);
for (rel = obj->rel; rel < rellim; rel++) {
Elf_Word r_symndx, r_type;
void *where;
@@ -657,7 +657,7 @@
const Elf_Rel *rellim;
const Elf_Rel *rel;
- rellim = (const Elf_Rel *)((char *)obj->pltrel + obj->pltrelsize);
+ rellim = (const Elf_Rel *)((const char *)obj->pltrel + obj->pltrelsize);
for (rel = obj->pltrel; rel < rellim; rel++) {
Elf_Addr *where;
@@ -687,7 +687,7 @@
const Elf_Rel *rel;
const Elf_Sym *def;
- rellim = (const Elf_Rel *)((char *)obj->pltrel + obj->pltrelsize);
+ rellim = (const Elf_Rel *)((const char *)obj->pltrel + obj->pltrelsize);
for (rel = obj->pltrel; rel < rellim; rel++) {
Elf_Addr *where;
@@ -714,7 +714,8 @@
}
int
-reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate)
+reloc_iresolve(Obj_Entry *obj __unused,
+ struct Struct_RtldLockState *lockstate __unused)
{
/* XXX not implemented */
@@ -722,8 +723,8 @@
}
int
-reloc_gnu_ifunc(Obj_Entry *obj, int flags,
- struct Struct_RtldLockState *lockstate)
+reloc_gnu_ifunc(Obj_Entry *obj __unused, int flags __unused,
+ struct Struct_RtldLockState *lockstate __unused)
{
/* XXX not implemented */
@@ -731,8 +732,9 @@
}
Elf_Addr
-reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const Obj_Entry *defobj,
- const Obj_Entry *obj, const Elf_Rel *rel)
+reloc_jmpslot(Elf_Addr *where, Elf_Addr target,
+ const Obj_Entry *defobj __unused, const Obj_Entry *obj __unused,
+ const Elf_Rel *rel)
{
assert(ELF_R_TYPE(rel->r_info) == R_MIPS_JUMP_SLOT);
Index: head/libexec/rtld-elf/mips/rtld_machdep.h
===================================================================
--- head/libexec/rtld-elf/mips/rtld_machdep.h
+++ head/libexec/rtld-elf/mips/rtld_machdep.h
@@ -43,6 +43,9 @@
Elf_Addr reloc_jmpslot(Elf_Addr *where, Elf_Addr target,
const struct Struct_Obj_Entry *defobj, const struct Struct_Obj_Entry *obj,
const Elf_Rel *rel);
+Elf_Addr _mips_rtld_bind(struct Struct_Obj_Entry *obj, Elf_Size reloff);
+void *_mips_get_tls(void);
+
#define make_function_pointer(def, defobj) \
((defobj)->relocbase + (def)->st_value)
Index: head/libexec/rtld-elf/paths.h
===================================================================
--- head/libexec/rtld-elf/paths.h
+++ head/libexec/rtld-elf/paths.h
@@ -69,10 +69,10 @@
#define SOFT_STANDARD_LIBRARY_PATH "/usr/libsoft"
#define LD_SOFT_ "LD_SOFT_"
-extern char *ld_elf_hints_default;
-extern char *ld_path_libmap_conf;
-extern char *ld_path_rtld;
-extern char *ld_standard_library_path;
-extern char *ld_env_prefix;
+extern const char *ld_elf_hints_default;
+extern const char *ld_path_libmap_conf;
+extern const char *ld_path_rtld;
+extern const char *ld_standard_library_path;
+extern const char *ld_env_prefix;
#endif /* PATHS_H */
Index: head/libexec/rtld-elf/powerpc/reloc.c
===================================================================
--- head/libexec/rtld-elf/powerpc/reloc.c
+++ head/libexec/rtld-elf/powerpc/reloc.c
@@ -71,7 +71,7 @@
*/
assert(dstobj->mainprog);
- relalim = (const Elf_Rela *) ((caddr_t) dstobj->rela +
+ relalim = (const Elf_Rela *)((const char *) dstobj->rela +
dstobj->relasize);
for (rela = dstobj->rela; rela < relalim; rela++) {
void *dstaddr;
@@ -88,7 +88,7 @@
continue;
}
- dstaddr = (void *) (dstobj->relocbase + rela->r_offset);
+ dstaddr = (void *)(dstobj->relocbase + rela->r_offset);
dstsym = dstobj->symtab + ELF_R_SYM(rela->r_info);
name = dstobj->strtab + dstsym->st_name;
size = dstsym->st_size;
@@ -113,7 +113,7 @@
return (-1);
}
- srcaddr = (const void *) (defobj->relocbase+srcsym->st_value);
+ srcaddr = (const void *)(defobj->relocbase+srcsym->st_value);
memcpy(dstaddr, srcaddr, size);
dbg("copy_reloc: src=%p,dst=%p,size=%d\n",srcaddr,dstaddr,size);
}
@@ -149,7 +149,7 @@
/*
* Relocate these values
*/
- relalim = (const Elf_Rela *)((caddr_t)rela + relasz);
+ relalim = (const Elf_Rela *)((const char *)rela + relasz);
for (; rela < relalim; rela++) {
where = (Elf_Addr *)(relocbase + rela->r_offset);
*where = (Elf_Addr)(relocbase + rela->r_addend);
@@ -161,8 +161,8 @@
* Relocate a non-PLT object with addend.
*/
static int
-reloc_nonplt_object(Obj_Entry *obj_rtld, Obj_Entry *obj, const Elf_Rela *rela,
- SymCache *cache, int flags, RtldLockState *lockstate)
+reloc_nonplt_object(Obj_Entry *obj_rtld __unused, Obj_Entry *obj,
+ const Elf_Rela *rela, SymCache *cache, int flags, RtldLockState *lockstate)
{
Elf_Addr *where = (Elf_Addr *)(obj->relocbase + rela->r_offset);
const Elf_Sym *def;
@@ -249,7 +249,8 @@
* error.
*/
if (!defobj->tls_done) {
- if (!allocate_tls_offset((Obj_Entry*) defobj)) {
+ if (!allocate_tls_offset(
+ __DECONST(Obj_Entry *, defobj))) {
_rtld_error("%s: No space available for static "
"Thread Local Storage", obj->path);
return (-1);
@@ -315,7 +316,7 @@
* "The PowerPC family uses only the Elf32_Rela relocation
* entries with explicit addends."
*/
- relalim = (const Elf_Rela *)((caddr_t)obj->rela + obj->relasize);
+ relalim = (const Elf_Rela *)((const char *)obj->rela + obj->relasize);
for (rela = obj->rela; rela < relalim; rela++) {
if (reloc_nonplt_object(obj_rtld, obj, rela, cache, flags,
lockstate) < 0)
@@ -398,7 +399,7 @@
if (obj->pltrelasize != 0) {
- relalim = (const Elf_Rela *)((char *)obj->pltrela +
+ relalim = (const Elf_Rela *)((const char *)obj->pltrela +
obj->pltrelasize);
for (rela = obj->pltrela; rela < relalim; rela++) {
assert(ELF_R_TYPE(rela->r_info) == R_PPC_JMP_SLOT);
@@ -433,7 +434,8 @@
Elf_Addr *where;
Elf_Addr target;
- relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize);
+ relalim = (const Elf_Rela *)((const char *)obj->pltrela +
+ obj->pltrelasize);
for (rela = obj->pltrela; rela < relalim; rela++) {
assert(ELF_R_TYPE(rela->r_info) == R_PPC_JMP_SLOT);
where = (Elf_Addr *)(obj->relocbase + rela->r_offset);
@@ -469,8 +471,8 @@
* trampoline call and jump table.
*/
Elf_Addr
-reloc_jmpslot(Elf_Addr *wherep, Elf_Addr target, const Obj_Entry *defobj,
- const Obj_Entry *obj, const Elf_Rel *rel)
+reloc_jmpslot(Elf_Addr *wherep, Elf_Addr target,
+ const Obj_Entry *defobj __unused, const Obj_Entry *obj, const Elf_Rel *rel)
{
Elf_Addr offset;
const Elf_Rela *rela = (const Elf_Rela *) rel;
@@ -529,7 +531,8 @@
}
int
-reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate)
+reloc_iresolve(Obj_Entry *obj __unused,
+ struct Struct_RtldLockState *lockstate __unused)
{
/* XXX not implemented */
@@ -537,8 +540,8 @@
}
int
-reloc_gnu_ifunc(Obj_Entry *obj, int flags,
- struct Struct_RtldLockState *lockstate)
+reloc_gnu_ifunc(Obj_Entry *obj __unused, int flags __unused,
+ struct Struct_RtldLockState *lockstate __unused)
{
/* XXX not implemented */
@@ -650,7 +653,7 @@
tls_static_space = tls_last_offset + tls_last_size + RTLD_STATIC_TLS_EXTRA;
- tp = (Elf_Addr **) ((char *) allocate_tls(list, NULL, TLS_TCB_SIZE, 8)
+ tp = (Elf_Addr **)((char *) allocate_tls(list, NULL, TLS_TCB_SIZE, 8)
+ TLS_TP_OFFSET + TLS_TCB_SIZE);
/*
Index: head/libexec/rtld-elf/powerpc/rtld_machdep.h
===================================================================
--- head/libexec/rtld-elf/powerpc/rtld_machdep.h
+++ head/libexec/rtld-elf/powerpc/rtld_machdep.h
@@ -42,6 +42,7 @@
Elf_Addr reloc_jmpslot(Elf_Addr *where, Elf_Addr target,
const struct Struct_Obj_Entry *defobj, const struct Struct_Obj_Entry *obj,
const Elf_Rel *rel);
+void reloc_non_plt_self(Elf_Dyn *dynp, Elf_Addr relocbase);
#define make_function_pointer(def, defobj) \
((defobj)->relocbase + (def)->st_value)
Index: head/libexec/rtld-elf/powerpc64/reloc.c
===================================================================
--- head/libexec/rtld-elf/powerpc64/reloc.c
+++ head/libexec/rtld-elf/powerpc64/reloc.c
@@ -67,7 +67,7 @@
*/
assert(dstobj->mainprog);
- relalim = (const Elf_Rela *) ((caddr_t) dstobj->rela +
+ relalim = (const Elf_Rela *)((const char *) dstobj->rela +
dstobj->relasize);
for (rela = dstobj->rela; rela < relalim; rela++) {
void *dstaddr;
@@ -84,7 +84,7 @@
continue;
}
- dstaddr = (void *) (dstobj->relocbase + rela->r_offset);
+ dstaddr = (void *)(dstobj->relocbase + rela->r_offset);
dstsym = dstobj->symtab + ELF_R_SYM(rela->r_info);
name = dstobj->strtab + dstsym->st_name;
size = dstsym->st_size;
@@ -109,7 +109,7 @@
return (-1);
}
- srcaddr = (const void *) (defobj->relocbase+srcsym->st_value);
+ srcaddr = (const void *)(defobj->relocbase+srcsym->st_value);
memcpy(dstaddr, srcaddr, size);
dbg("copy_reloc: src=%p,dst=%p,size=%zd\n",srcaddr,dstaddr,size);
}
@@ -145,7 +145,7 @@
/*
* Relocate these values
*/
- relalim = (const Elf_Rela *)((caddr_t)rela + relasz);
+ relalim = (const Elf_Rela *)((const char *)rela + relasz);
for (; rela < relalim; rela++) {
where = (Elf_Addr *)(relocbase + rela->r_offset);
*where = (Elf_Addr)(relocbase + rela->r_addend);
@@ -157,8 +157,8 @@
* Relocate a non-PLT object with addend.
*/
static int
-reloc_nonplt_object(Obj_Entry *obj_rtld, Obj_Entry *obj, const Elf_Rela *rela,
- SymCache *cache, int flags, RtldLockState *lockstate)
+reloc_nonplt_object(Obj_Entry *obj_rtld __unused, Obj_Entry *obj,
+ const Elf_Rela *rela, SymCache *cache, int flags, RtldLockState *lockstate)
{
Elf_Addr *where = (Elf_Addr *)(obj->relocbase + rela->r_offset);
const Elf_Sym *def;
@@ -246,7 +246,8 @@
* error.
*/
if (!defobj->tls_done) {
- if (!allocate_tls_offset((Obj_Entry*) defobj)) {
+ if (!allocate_tls_offset(
+ __DECONST(Obj_Entry *, defobj))) {
_rtld_error("%s: No space available for static "
"Thread Local Storage", obj->path);
return (-1);
@@ -315,7 +316,7 @@
* "The PowerPC family uses only the Elf32_Rela relocation
* entries with explicit addends."
*/
- relalim = (const Elf_Rela *)((caddr_t)obj->rela + obj->relasize);
+ relalim = (const Elf_Rela *)((const char *)obj->rela + obj->relasize);
for (rela = obj->rela; rela < relalim; rela++) {
if (reloc_nonplt_object(obj_rtld, obj, rela, cache, flags,
lockstate) < 0)
@@ -370,7 +371,7 @@
const Elf_Rela *rela;
if (obj->pltrelasize != 0) {
- relalim = (const Elf_Rela *)((char *)obj->pltrela +
+ relalim = (const Elf_Rela *)((const char *)obj->pltrela +
obj->pltrelasize);
for (rela = obj->pltrela; rela < relalim; rela++) {
assert(ELF_R_TYPE(rela->r_info) == R_PPC_JMP_SLOT);
@@ -398,7 +399,8 @@
Elf_Addr *where;
Elf_Addr target;
- relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize);
+ relalim = (const Elf_Rela *)((const char *)obj->pltrela +
+ obj->pltrelasize);
for (rela = obj->pltrela; rela < relalim; rela++) {
assert(ELF_R_TYPE(rela->r_info) == R_PPC_JMP_SLOT);
where = (Elf_Addr *)(obj->relocbase + rela->r_offset);
@@ -435,7 +437,7 @@
*/
Elf_Addr
reloc_jmpslot(Elf_Addr *wherep, Elf_Addr target, const Obj_Entry *defobj,
- const Obj_Entry *obj, const Elf_Rel *rel)
+ const Obj_Entry *obj __unused, const Elf_Rel *rel __unused)
{
/*
@@ -494,7 +496,8 @@
}
int
-reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate)
+reloc_iresolve(Obj_Entry *obj __unused,
+ struct Struct_RtldLockState *lockstate __unused)
{
/* XXX not implemented */
@@ -502,8 +505,8 @@
}
int
-reloc_gnu_ifunc(Obj_Entry *obj, int flags,
- struct Struct_RtldLockState *lockstate)
+reloc_gnu_ifunc(Obj_Entry *obj __unused, int flags __unused,
+ struct Struct_RtldLockState *lockstate __unused)
{
/* XXX not implemented */
@@ -555,7 +558,7 @@
tls_static_space = tls_last_offset + tls_last_size + RTLD_STATIC_TLS_EXTRA;
- tp = (Elf_Addr **) ((char *)allocate_tls(list, NULL, TLS_TCB_SIZE, 16)
+ tp = (Elf_Addr **)((char *)allocate_tls(list, NULL, TLS_TCB_SIZE, 16)
+ TLS_TP_OFFSET + TLS_TCB_SIZE);
__asm __volatile("mr 13,%0" :: "r"(tp));
Index: head/libexec/rtld-elf/powerpc64/rtld_machdep.h
===================================================================
--- head/libexec/rtld-elf/powerpc64/rtld_machdep.h
+++ head/libexec/rtld-elf/powerpc64/rtld_machdep.h
@@ -42,6 +42,7 @@
Elf_Addr reloc_jmpslot(Elf_Addr *where, Elf_Addr target,
const struct Struct_Obj_Entry *defobj, const struct Struct_Obj_Entry *obj,
const Elf_Rel *rel);
+void reloc_non_plt_self(Elf_Dyn *dynp, Elf_Addr relocbase);
#define make_function_pointer(def, defobj) \
((defobj)->relocbase + (def)->st_value)
Index: head/libexec/rtld-elf/riscv/reloc.c
===================================================================
--- head/libexec/rtld-elf/riscv/reloc.c
+++ head/libexec/rtld-elf/riscv/reloc.c
@@ -105,7 +105,7 @@
*/
assert(dstobj->mainprog);
- relalim = (const Elf_Rela *)((char *)dstobj->rela +
+ relalim = (const Elf_Rela *)((const char *)dstobj->rela +
dstobj->relasize);
for (rela = dstobj->rela; rela < relalim; rela++) {
if (ELF_R_TYPE(rela->r_info) != R_RISCV_COPY)
@@ -152,7 +152,8 @@
const Elf_Rela *relalim;
const Elf_Rela *rela;
- relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize);
+ relalim = (const Elf_Rela *)((const char *)obj->pltrela +
+ obj->pltrelasize);
for (rela = obj->pltrela; rela < relalim; rela++) {
Elf_Addr *where;
@@ -176,7 +177,8 @@
const Elf_Rela *rela;
const Elf_Sym *def;
- relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize);
+ relalim = (const Elf_Rela *)((const char *)obj->pltrela +
+ obj->pltrelasize);
for (rela = obj->pltrela; rela < relalim; rela++) {
Elf_Addr *where;
@@ -203,7 +205,8 @@
}
int
-reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate)
+reloc_iresolve(Obj_Entry *obj __unused,
+ struct Struct_RtldLockState *lockstate __unused)
{
/* XXX not implemented */
@@ -211,8 +214,8 @@
}
int
-reloc_gnu_ifunc(Obj_Entry *obj, int flags,
- struct Struct_RtldLockState *lockstate)
+reloc_gnu_ifunc(Obj_Entry *obj __unused, int flags __unused,
+ struct Struct_RtldLockState *lockstate __unused)
{
/* XXX not implemented */
@@ -220,8 +223,9 @@
}
Elf_Addr
-reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const Obj_Entry *defobj,
- const Obj_Entry *obj, const Elf_Rel *rel)
+reloc_jmpslot(Elf_Addr *where, Elf_Addr target,
+ const Obj_Entry *defobj __unused, const Obj_Entry *obj __unused,
+ const Elf_Rel *rel)
{
assert(ELF_R_TYPE(rel->r_info) == R_RISCV_JUMP_SLOT);
@@ -260,7 +264,7 @@
cache = calloc(obj->dynsymcount, sizeof(SymCache));
/* No need to check for NULL here */
- relalim = (const Elf_Rela *)((caddr_t)obj->rela + obj->relasize);
+ relalim = (const Elf_Rela *)((const char *)obj->rela + obj->relasize);
for (rela = obj->rela; rela < relalim; rela++) {
where = (Elf_Addr *)(obj->relocbase + rela->r_offset);
symnum = ELF_R_SYM(rela->r_info);
@@ -315,7 +319,8 @@
* error.
*/
if (!defobj->tls_done) {
- if (!allocate_tls_offset((Obj_Entry*) defobj)) {
+ if (!allocate_tls_offset(
+ __DECONST(Obj_Entry *, defobj))) {
_rtld_error(
"%s: No space available for static "
"Thread Local Storage", obj->path);
@@ -341,7 +346,8 @@
* error.
*/
if (!defobj->tls_done) {
- if (!allocate_tls_offset((Obj_Entry*) defobj)) {
+ if (!allocate_tls_offset(
+ __DECONST(Obj_Entry *, defobj))) {
_rtld_error(
"%s: No space available for static "
"Thread Local Storage", obj->path);
@@ -390,7 +396,7 @@
tls_static_space = tls_last_offset + tls_last_size +
RTLD_STATIC_TLS_EXTRA;
- tp = (Elf_Addr **) ((char *)allocate_tls(objs, NULL, TLS_TCB_SIZE, 16)
+ tp = (Elf_Addr **)((char *)allocate_tls(objs, NULL, TLS_TCB_SIZE, 16)
+ TLS_TP_OFFSET + TLS_TCB_SIZE);
__asm __volatile("mv tp, %0" :: "r"(tp));
@@ -407,5 +413,5 @@
p = tls_get_addr_common((Elf_Addr**)((Elf_Addr)_tp - TLS_TP_OFFSET
- TLS_TCB_SIZE), ti->ti_module, ti->ti_offset);
- return (p + TLS_DTV_OFFSET);
+ return ((char*)p + TLS_DTV_OFFSET);
}
Index: head/libexec/rtld-elf/rtld.h
===================================================================
--- head/libexec/rtld-elf/rtld.h
+++ head/libexec/rtld-elf/rtld.h
@@ -211,12 +211,12 @@
Elf32_Word maskwords_bm_gnu; /* Bloom filter words - 1 (bitmask) */
Elf32_Word shift2_gnu; /* Bloom filter shift count */
Elf32_Word dynsymcount; /* Total entries in dynsym table */
- Elf_Addr *bloom_gnu; /* Bloom filter used by GNU hash func */
+ const Elf_Addr *bloom_gnu; /* Bloom filter used by GNU hash func */
const Elf_Hashelt *buckets_gnu; /* GNU hash table bucket array */
const Elf_Hashelt *chain_zero_gnu; /* GNU hash table value array (Zeroed) */
- char *rpath; /* Search path specified in object */
- char *runpath; /* Search path with different priority */
+ const char *rpath; /* Search path specified in object */
+ const char *runpath; /* Search path with different priority */
Needed_Entry *needed; /* Shared objects needed by this one (%) */
Needed_Entry *needed_filtees;
Needed_Entry *needed_aux_filtees;
Index: head/libexec/rtld-elf/rtld.c
===================================================================
--- head/libexec/rtld-elf/rtld.c
+++ head/libexec/rtld-elf/rtld.c
@@ -159,7 +159,7 @@
static void ref_dag(Obj_Entry *);
static char *origin_subst_one(Obj_Entry *, char *, const char *,
const char *, bool);
-static char *origin_subst(Obj_Entry *, char *);
+static char *origin_subst(Obj_Entry *, const char *);
static bool obj_resolve_origin(Obj_Entry *obj);
static void preinit_main(void);
static int rtld_verify_versions(const Objlist *);
@@ -196,8 +196,8 @@
static char *ld_library_dirs; /* Environment variable for library descriptors */
static char *ld_preload; /* Environment variable for libraries to
load first */
-static char *ld_elf_hints_path; /* Environment variable for alternative hints path */
-static char *ld_tracing; /* Called from ldd to print libs */
+static const char *ld_elf_hints_path; /* Environment variable for alternative hints path */
+static const char *ld_tracing; /* Called from ldd to print libs */
static char *ld_utrace; /* Use utrace() to log events. */
static struct obj_entry_q obj_list; /* Queue of all loaded objects */
static Obj_Entry *obj_main; /* The main program shared object */
@@ -277,11 +277,11 @@
/*
* Globals for path names, and such
*/
-char *ld_elf_hints_default = _PATH_ELF_HINTS;
-char *ld_path_libmap_conf = _PATH_LIBMAP_CONF;
-char *ld_path_rtld = _PATH_RTLD;
-char *ld_standard_library_path = STANDARD_LIBRARY_PATH;
-char *ld_env_prefix = LD_;
+const char *ld_elf_hints_default = _PATH_ELF_HINTS;
+const char *ld_path_libmap_conf = _PATH_LIBMAP_CONF;
+const char *ld_path_rtld = _PATH_RTLD;
+const char *ld_standard_library_path = STANDARD_LIBRARY_PATH;
+const char *ld_env_prefix = LD_;
/*
* Fill in a DoneList with an allocation large enough to hold all of
@@ -363,7 +363,8 @@
RtldLockState lockstate;
struct stat st;
Elf_Addr *argcp;
- char **argv, *argv0, **env, **envp, *kexecpath, *library_path_rpath;
+ char **argv, **env, **envp, *kexecpath, *library_path_rpath;
+ const char *argv0;
caddr_t imgentry;
char buf[MAXPATHLEN];
int argc, fd, i, phnum, rtld_argc;
@@ -797,11 +798,11 @@
if (sigsetjmp(lockstate.env, 0) != 0)
lock_upgrade(rtld_bind_lock, &lockstate);
if (obj->pltrel)
- rel = (const Elf_Rel *) ((caddr_t) obj->pltrel + reloff);
+ rel = (const Elf_Rel *)((const char *)obj->pltrel + reloff);
else
- rel = (const Elf_Rel *) ((caddr_t) obj->pltrela + reloff);
+ rel = (const Elf_Rel *)((const char *)obj->pltrela + reloff);
- where = (Elf_Addr *) (obj->relocbase + rel->r_offset);
+ where = (Elf_Addr *)(obj->relocbase + rel->r_offset);
def = find_symdef(ELF_R_SYM(rel->r_info), obj, &defobj, SYMLOOK_IN_PLT,
NULL, &lockstate);
if (def == NULL)
@@ -944,7 +945,7 @@
}
static char *
-origin_subst(Obj_Entry *obj, char *real)
+origin_subst(Obj_Entry *obj, const char *real)
{
char *res1, *res2, *res3, *res4;
@@ -956,7 +957,9 @@
return (NULL);
}
}
- res1 = origin_subst_one(obj, real, "$ORIGIN", NULL, false);
+ /* __DECONST is safe here since without may_free real is unchanged */
+ res1 = origin_subst_one(obj, __DECONST(char *, real), "$ORIGIN", NULL,
+ false);
res2 = origin_subst_one(NULL, res1, "$OSNAME", uts.sysname, true);
res3 = origin_subst_one(NULL, res2, "$OSREL", uts.release, true);
res4 = origin_subst_one(NULL, res3, "$PLATFORM", uts.machine, true);
@@ -1003,7 +1006,7 @@
switch (dynp->d_tag) {
case DT_REL:
- obj->rel = (const Elf_Rel *) (obj->relocbase + dynp->d_un.d_ptr);
+ obj->rel = (const Elf_Rel *)(obj->relocbase + dynp->d_un.d_ptr);
break;
case DT_RELSZ:
@@ -1024,7 +1027,7 @@
break;
case DT_RELA:
- obj->rela = (const Elf_Rela *) (obj->relocbase + dynp->d_un.d_ptr);
+ obj->rela = (const Elf_Rela *)(obj->relocbase + dynp->d_un.d_ptr);
break;
case DT_RELASZ:
@@ -1050,7 +1053,7 @@
break;
case DT_STRTAB:
- obj->strtab = (const char *) (obj->relocbase + dynp->d_un.d_ptr);
+ obj->strtab = (const char *)(obj->relocbase + dynp->d_un.d_ptr);
break;
case DT_STRSZ:
@@ -1058,7 +1061,7 @@
break;
case DT_VERNEED:
- obj->verneed = (const Elf_Verneed *) (obj->relocbase +
+ obj->verneed = (const Elf_Verneed *)(obj->relocbase +
dynp->d_un.d_val);
break;
@@ -1067,7 +1070,7 @@
break;
case DT_VERDEF:
- obj->verdef = (const Elf_Verdef *) (obj->relocbase +
+ obj->verdef = (const Elf_Verdef *)(obj->relocbase +
dynp->d_un.d_val);
break;
@@ -1103,7 +1106,7 @@
bloom_size32 = (__ELF_WORD_SIZE / 32) * nmaskwords;
obj->maskwords_bm_gnu = nmaskwords - 1;
obj->shift2_gnu = hashtab[3];
- obj->bloom_gnu = (Elf_Addr *) (hashtab + 4);
+ obj->bloom_gnu = (const Elf_Addr *)(hashtab + 4);
obj->buckets_gnu = hashtab + 4 + bloom_size32;
obj->chain_zero_gnu = obj->buckets_gnu + obj->nbuckets_gnu -
obj->symndx_gnu;
@@ -1150,7 +1153,7 @@
break;
case DT_PLTGOT:
- obj->pltgot = (Elf_Addr *) (obj->relocbase + dynp->d_un.d_ptr);
+ obj->pltgot = (Elf_Addr *)(obj->relocbase + dynp->d_un.d_ptr);
break;
case DT_TEXTREL:
@@ -1178,7 +1181,7 @@
break;
case DT_INIT:
- obj->init = (Elf_Addr) (obj->relocbase + dynp->d_un.d_ptr);
+ obj->init = (Elf_Addr)(obj->relocbase + dynp->d_un.d_ptr);
break;
case DT_PREINIT_ARRAY:
@@ -1198,7 +1201,7 @@
break;
case DT_FINI:
- obj->fini = (Elf_Addr) (obj->relocbase + dynp->d_un.d_ptr);
+ obj->fini = (Elf_Addr)(obj->relocbase + dynp->d_un.d_ptr);
break;
case DT_FINI_ARRAY:
@@ -1218,7 +1221,7 @@
case DT_DEBUG:
if (!early)
dbg("Filling in DT_DEBUG entry");
- ((Elf_Dyn*)dynp)->d_un.d_ptr = (Elf_Addr) &r_debug;
+ (__DECONST(Elf_Dyn *, dynp))->d_un.d_ptr = (Elf_Addr)&r_debug;
break;
#endif
@@ -1252,7 +1255,7 @@
break;
case DT_MIPS_PLTGOT:
- obj->mips_pltgot = (Elf_Addr *) (obj->relocbase +
+ obj->mips_pltgot = (Elf_Addr *)(obj->relocbase +
dynp->d_un.d_ptr);
break;
@@ -1260,7 +1263,7 @@
#ifdef __powerpc64__
case DT_PPC64_GLINK:
- obj->glink = (Elf_Addr) (obj->relocbase + dynp->d_un.d_ptr);
+ obj->glink = (Elf_Addr)(obj->relocbase + dynp->d_un.d_ptr);
break;
#endif
@@ -1337,10 +1340,10 @@
rtld_die();
if (dyn_runpath != NULL) {
- obj->runpath = (char *)obj->strtab + dyn_runpath->d_un.d_val;
+ obj->runpath = (const char *)obj->strtab + dyn_runpath->d_un.d_val;
obj->runpath = origin_subst(obj, obj->runpath);
} else if (dyn_rpath != NULL) {
- obj->rpath = (char *)obj->strtab + dyn_rpath->d_un.d_val;
+ obj->rpath = (const char *)obj->strtab + dyn_rpath->d_un.d_val;
obj->rpath = origin_subst(obj, obj->rpath);
}
if (dyn_soname != NULL)
@@ -1380,7 +1383,7 @@
obj->phdr = phdr;
obj->phsize = ph->p_memsz;
- obj->relocbase = (caddr_t)phdr - ph->p_vaddr;
+ obj->relocbase = __DECONST(char *, phdr) - ph->p_vaddr;
break;
}
@@ -1586,14 +1589,15 @@
static char *
find_library(const char *xname, const Obj_Entry *refobj, int *fdp)
{
- char *name, *pathname, *refobj_path;
+ char *pathname, *refobj_path;
+ const char *name;
bool nodeflib, objgiven;
objgiven = refobj != NULL;
if (libmap_disable || !objgiven ||
(name = lm_find(refobj->path, xname)) == NULL)
- name = (char *)xname;
+ name = xname;
if (strchr(name, '/') != NULL) { /* Hard coded pathname */
if (name[0] != '/' && !trust) {
@@ -1782,7 +1786,8 @@
static const char *
gethints(bool nostdlib)
{
- static char *hints, *filtered_path;
+ static char *filtered_path;
+ static const char *hints;
static struct elfhints_hdr hdr;
struct fill_search_info_args sargs, hargs;
struct dl_serinfo smeta, hmeta, *SLPinfo, *hintinfo;
@@ -2518,7 +2523,7 @@
continue;
if (addr < (void *) obj->mapbase)
continue;
- if (addr < (void *) (obj->mapbase + obj->mapsize))
+ if (addr < (void *)(obj->mapbase + obj->mapsize))
return obj;
}
return NULL;
@@ -3215,12 +3220,12 @@
*/
void
dllockinit(void *context,
- void *(*lock_create)(void *context),
- void (*rlock_acquire)(void *lock),
- void (*wlock_acquire)(void *lock),
- void (*lock_release)(void *lock),
- void (*lock_destroy)(void *lock),
- void (*context_destroy)(void *context))
+ void *(*_lock_create)(void *context) __unused,
+ void (*_rlock_acquire)(void *lock) __unused,
+ void (*_wlock_acquire)(void *lock) __unused,
+ void (*_lock_release)(void *lock) __unused,
+ void (*_lock_destroy)(void *lock) __unused,
+ void (*context_destroy)(void *context))
{
static void *cur_context;
static void (*cur_context_destroy)(void *);
@@ -3258,7 +3263,7 @@
rlock_acquire(rtld_bind_lock, &lockstate);
if (sigsetjmp(lockstate.env, 0) != 0)
lock_upgrade(rtld_bind_lock, &lockstate);
- environ = (char **)*get_program_var_addr("environ", &lockstate);
+ environ = __DECONST(char **, *get_program_var_addr("environ", &lockstate));
lock_release(rtld_bind_lock, &lockstate);
}
lo_flags = RTLD_LO_DLOPEN;
@@ -3971,7 +3976,7 @@
* +0 RetAddr
*/
void
-r_debug_state(struct r_debug* rd, struct link_map *m)
+r_debug_state(struct r_debug* rd __unused, struct link_map *m __unused)
{
/*
* The following is a hack to force the compiler to emit calls to
@@ -3989,7 +3994,7 @@
* main is not available in the symbol table.
*/
void
-_r_debug_postinit(struct link_map *m)
+_r_debug_postinit(struct link_map *m __unused)
{
/* See r_debug_state(). */
@@ -4310,8 +4315,8 @@
else if (((req->flags & SYMLOOK_IN_PLT) == 0) &&
(ELF_ST_TYPE(symp->st_info) == STT_FUNC))
break;
- /* fallthrough */
#endif
+ /* fallthrough */
default:
return (false);
}
@@ -4480,8 +4485,8 @@
static void
trace_loaded_objects(Obj_Entry *obj)
{
- char *fmt1, *fmt2, *fmt, *main_local, *list_containers;
- int c;
+ const char *fmt1, *fmt2, *fmt, *main_local, *list_containers;
+ int c;
if ((main_local = getenv(_LD("TRACE_LOADED_OBJECTS_PROGNAME"))) == NULL)
main_local = "";
@@ -4495,9 +4500,9 @@
list_containers = getenv(_LD("TRACE_LOADED_OBJECTS_ALL"));
for (; obj != NULL; obj = TAILQ_NEXT(obj, next)) {
- Needed_Entry *needed;
- char *name, *path;
- bool is_lib;
+ Needed_Entry *needed;
+ const char *name, *path;
+ bool is_lib;
if (obj->marker)
continue;
@@ -4512,7 +4517,7 @@
} else
path = "not found";
- name = (char *)obj->strtab + needed->name;
+ name = obj->strtab + needed->name;
is_lib = strncmp(name, "lib", 3) == 0; /* XXX - bogus */
fmt = is_lib ? fmt1 : fmt2;
@@ -4752,7 +4757,7 @@
char *tls_block;
Elf_Addr *dtv, **tcb;
Elf_Addr addr;
- int i;
+ Elf_Addr i;
size_t extra_size, maxalign, post_size, pre_size, tls_block_size;
size_t tls_init_align;
@@ -4800,7 +4805,7 @@
if (obj->tlsinitsize > 0)
memcpy((void*) addr, obj->tlsinit, obj->tlsinitsize);
if (obj->tlssize > obj->tlsinitsize)
- memset((void*) (addr + obj->tlsinitsize), 0,
+ memset((void*)(addr + obj->tlsinitsize), 0,
obj->tlssize - obj->tlsinitsize);
dtv[obj->tlsindex + 1] = addr;
}
@@ -4811,7 +4816,7 @@
}
void
-free_tls(void *tcb, size_t tcbsize, size_t tcbalign)
+free_tls(void *tcb, size_t tcbsize, size_t tcbalign __unused)
{
Elf_Addr *dtv;
Elf_Addr tlsstart, tlsend;
@@ -4902,7 +4907,7 @@
if (obj->marker || obj->tlsoffset == 0)
continue;
addr = segbase - obj->tlsoffset;
- memset((void*) (addr + obj->tlsinitsize),
+ memset((void*)(addr + obj->tlsinitsize),
0, obj->tlssize - obj->tlsinitsize);
if (obj->tlsinit)
memcpy((void*) addr, obj->tlsinit, obj->tlsinitsize);
@@ -4914,7 +4919,7 @@
}
void
-free_tls(void *tls, size_t tcbsize, size_t tcbalign)
+free_tls(void *tls, size_t tcbsize __unused, size_t tcbalign)
{
Elf_Addr* dtv;
size_t size, ralign;
@@ -5130,13 +5135,13 @@
}
if (vna->vna_hash == vd->vd_hash) {
const Elf_Verdaux *aux = (const Elf_Verdaux *)
- ((char *)vd + vd->vd_aux);
+ ((const char *)vd + vd->vd_aux);
if (strcmp(vername, depobj->strtab + aux->vda_name) == 0)
return (0);
}
if (vd->vd_next == 0)
break;
- vd = (const Elf_Verdef *) ((char *)vd + vd->vd_next);
+ vd = (const Elf_Verdef *)((const char *)vd + vd->vd_next);
}
if (vna->vna_flags & VER_FLG_WEAK)
return (0);
@@ -5172,18 +5177,18 @@
obj->path, vn->vn_version);
return (-1);
}
- vna = (const Elf_Vernaux *) ((char *)vn + vn->vn_aux);
+ vna = (const Elf_Vernaux *)((const char *)vn + vn->vn_aux);
for (;;) {
vernum = VER_NEED_IDX(vna->vna_other);
if (vernum > maxvernum)
maxvernum = vernum;
if (vna->vna_next == 0)
break;
- vna = (const Elf_Vernaux *) ((char *)vna + vna->vna_next);
+ vna = (const Elf_Vernaux *)((const char *)vna + vna->vna_next);
}
if (vn->vn_next == 0)
break;
- vn = (const Elf_Verneed *) ((char *)vn + vn->vn_next);
+ vn = (const Elf_Verneed *)((const char *)vn + vn->vn_next);
}
vd = obj->verdef;
@@ -5198,7 +5203,7 @@
maxvernum = vernum;
if (vd->vd_next == 0)
break;
- vd = (const Elf_Verdef *) ((char *)vd + vd->vd_next);
+ vd = (const Elf_Verdef *)((const char *)vd + vd->vd_next);
}
if (maxvernum == 0)
@@ -5217,7 +5222,7 @@
if ((vd->vd_flags & VER_FLG_BASE) == 0) {
vernum = VER_DEF_IDX(vd->vd_ndx);
assert(vernum <= maxvernum);
- vda = (const Elf_Verdaux *)((char *)vd + vd->vd_aux);
+ vda = (const Elf_Verdaux *)((const char *)vd + vd->vd_aux);
obj->vertab[vernum].hash = vd->vd_hash;
obj->vertab[vernum].name = obj->strtab + vda->vda_name;
obj->vertab[vernum].file = NULL;
@@ -5225,7 +5230,7 @@
}
if (vd->vd_next == 0)
break;
- vd = (const Elf_Verdef *) ((char *)vd + vd->vd_next);
+ vd = (const Elf_Verdef *)((const char *)vd + vd->vd_next);
}
vn = obj->verneed;
@@ -5233,7 +5238,7 @@
depobj = locate_dependency(obj, obj->strtab + vn->vn_file);
if (depobj == NULL)
return (-1);
- vna = (const Elf_Vernaux *) ((char *)vn + vn->vn_aux);
+ vna = (const Elf_Vernaux *)((const char *)vn + vn->vn_aux);
for (;;) {
if (check_object_provided_version(obj, depobj, vna))
return (-1);
@@ -5246,11 +5251,11 @@
VER_INFO_HIDDEN : 0;
if (vna->vna_next == 0)
break;
- vna = (const Elf_Vernaux *) ((char *)vna + vna->vna_next);
+ vna = (const Elf_Vernaux *)((const char *)vna + vna->vna_next);
}
if (vn->vn_next == 0)
break;
- vn = (const Elf_Verneed *) ((char *)vn + vn->vn_next);
+ vn = (const Elf_Verneed *)((const char *)vn + vn->vn_next);
}
return 0;
}
@@ -5577,7 +5582,7 @@
* No unresolved symbols for rtld.
*/
void
-__pthread_cxa_finalize(struct dl_phdr_info *a)
+__pthread_cxa_finalize(struct dl_phdr_info *a __unused)
{
}
Index: head/libexec/rtld-elf/sparc64/reloc.c
===================================================================
--- head/libexec/rtld-elf/sparc64/reloc.c
+++ head/libexec/rtld-elf/sparc64/reloc.c
@@ -256,7 +256,7 @@
assert(dstobj->mainprog); /* COPY relocations are invalid elsewhere */
- relalim = (const Elf_Rela *)((caddr_t)dstobj->rela + dstobj->relasize);
+ relalim = (const Elf_Rela *)((const char *)dstobj->rela + dstobj->relasize);
for (rela = dstobj->rela; rela < relalim; rela++) {
if (ELF_R_TYPE(rela->r_info) == R_SPARC_COPY) {
dstaddr = (void *)(dstobj->relocbase + rela->r_offset);
@@ -316,7 +316,7 @@
} else
cache = NULL;
- relalim = (const Elf_Rela *)((caddr_t)obj->rela + obj->relasize);
+ relalim = (const Elf_Rela *)((const char *)obj->rela + obj->relasize);
for (rela = obj->rela; rela < relalim; rela++) {
if (reloc_nonplt_object(obj, rela, cache, flags, lockstate) < 0)
goto done;
@@ -408,8 +408,8 @@
* of) static TLS in dynamically loaded modules. If
* we run out of space, we generate an error.
*/
- if (!defobj->tls_done &&
- !allocate_tls_offset((Obj_Entry*)defobj)) {
+ if (!defobj->tls_done && !allocate_tls_offset(
+ __DECONST(Obj_Entry *, defobj))) {
_rtld_error("%s: No space available for "
"static Thread Local Storage", obj->path);
return (-1);
@@ -487,7 +487,7 @@
}
int
-reloc_plt(Obj_Entry *obj)
+reloc_plt(Obj_Entry *obj __unused)
{
#if 0
const Obj_Entry *defobj;
@@ -542,7 +542,8 @@
Elf_Addr *where;
Elf_Addr target;
- relalim = (const Elf_Rela *)((char *)obj->pltrela + obj->pltrelasize);
+ relalim = (const Elf_Rela *)((const char *)obj->pltrela +
+ obj->pltrelasize);
for (rela = obj->pltrela; rela < relalim; rela++) {
assert(ELF64_R_TYPE_ID(rela->r_info) == R_SPARC_JMP_SLOT);
where = (Elf_Addr *)(obj->relocbase + rela->r_offset);
@@ -551,14 +552,16 @@
if (def == NULL)
return -1;
target = (Elf_Addr)(defobj->relocbase + def->st_value);
- reloc_jmpslot(where, target, defobj, obj, (Elf_Rel *)rela);
+ reloc_jmpslot(where, target, defobj, obj,
+ (const Elf_Rel *)rela);
}
obj->jmpslots_done = true;
return (0);
}
int
-reloc_iresolve(Obj_Entry *obj, struct Struct_RtldLockState *lockstate)
+reloc_iresolve(Obj_Entry *obj __unused,
+ struct Struct_RtldLockState *lockstate __unused)
{
/* XXX not implemented */
@@ -566,8 +569,8 @@
}
int
-reloc_gnu_ifunc(Obj_Entry *obj, int flags,
- struct Struct_RtldLockState *lockstate)
+reloc_gnu_ifunc(Obj_Entry *obj __unused, int flags __unused,
+ struct Struct_RtldLockState *lockstate __unused)
{
/* XXX not implemented */
@@ -575,7 +578,7 @@
}
Elf_Addr
-reloc_jmpslot(Elf_Addr *wherep, Elf_Addr target, const Obj_Entry *obj,
+reloc_jmpslot(Elf_Addr *wherep, Elf_Addr target, const Obj_Entry *obj __unused,
const Obj_Entry *refobj, const Elf_Rel *rel)
{
const Elf_Rela *rela = (const Elf_Rela *)rel;
@@ -612,7 +615,7 @@
*/
where = (Elf_Word *)wherep;
offset = ((Elf_Addr)where) - target;
- if (offset <= (1L<<20) && offset >= -(1L<<20)) {
+ if (offset <= (1UL<<20) && offset >= -(1UL<<20)) {
/*
* We're within 1MB -- we can use a direct branch
* instruction.
@@ -631,7 +634,7 @@
*/
where[1] = BAA | ((offset >> 2) &0x3fffff);
flush(where, 4);
- } else if (target >= 0 && target < (1L<<32)) {
+ } else if (target < (1UL<<32)) {
/*
* We're within 32-bits of address zero.
*
@@ -651,7 +654,7 @@
flush(where, 8);
where[1] = SETHI | HIVAL(target, 10);
flush(where, 4);
- } else if (target <= 0 && target > -(1L<<32)) {
+ } else if (target > -(1UL<<32)) {
/*
* We're within 32-bits of address -1.
*
@@ -673,7 +676,7 @@
flush(where, 8);
where[1] = SETHI | HIVAL(~target, 10);
flush(where, 4);
- } else if (offset <= (1L<<32) && offset >= -((1L<<32) - 4)) {
+ } else if (offset <= (1UL<<32) && offset >= -((1UL<<32) - 4)) {
/*
* We're within 32-bits -- we can use a direct call
* insn
@@ -696,7 +699,7 @@
flush(where, 8);
where[1] = MOV71;
flush(where, 4);
- } else if (offset >= 0 && offset < (1L<<44)) {
+ } else if (offset < (1L<<44)) {
/*
* We're within 44 bits. We can generate this
* pattern:
@@ -721,7 +724,7 @@
flush(where, 8);
where[1] = SETHI | HIVAL(offset, 22);
flush(where, 4);
- } else if (offset < 0 && offset > -(1L<<44)) {
+ } else if (offset > -(1UL<<44)) {
/*
* We're within 44 bits. We can generate this
* pattern:

File Metadata

Mime Type
text/plain
Expires
Sat, Nov 15, 4:47 PM (2 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25297498
Default Alt Text
D17153.id49770.diff (54 KB)

Event Timeline