summaryrefslogtreecommitdiff
path: root/usr/src/cmd/sgs/rtld
diff options
context:
space:
mode:
authorab196087 <none@none>2008-03-18 09:17:00 -0700
committerab196087 <none@none>2008-03-18 09:17:00 -0700
commitba2be53024c0b999e74ba9adcd7d80fec5df8c57 (patch)
tree8d4a064e991d60c2948a5fff7e94617d0c81c7e7 /usr/src/cmd/sgs/rtld
parent67004932d7fa76c24b8f7355e7edd136648990a4 (diff)
downloadillumos-joyent-ba2be53024c0b999e74ba9adcd7d80fec5df8c57.tar.gz
PSARC 2008/179 cross link-editor
6671255 link-editor should support cross linking --HG-- rename : usr/src/cmd/sgs/libld/common/libld.chk.msg => deleted_files/usr/src/cmd/sgs/libld/common/libld.chk.msg rename : usr/src/cmd/sgs/libld/common/machsym.intel.c => deleted_files/usr/src/cmd/sgs/libld/common/machsym.intel.c rename : usr/src/uts/intel/amd64/krtld/relmach.h => deleted_files/usr/src/uts/intel/amd64/krtld/relmach.h rename : usr/src/uts/intel/ia32/krtld/relmach.h => deleted_files/usr/src/uts/intel/ia32/krtld/relmach.h rename : usr/src/uts/sparc/krtld/relmach.h => deleted_files/usr/src/uts/sparc/krtld/relmach.h rename : usr/src/uts/sparc/sys/machelf.h => deleted_files/usr/src/uts/sparc/sys/machelf.h rename : usr/src/cmd/sgs/include/i386/machdep.h => usr/src/cmd/sgs/include/i386/machdep_x86.h rename : usr/src/cmd/sgs/include/sparc/machdep.h => usr/src/cmd/sgs/include/sparc/machdep_sparc.h rename : usr/src/uts/intel/sys/machelf.h => usr/src/uts/common/sys/machelf.h
Diffstat (limited to 'usr/src/cmd/sgs/rtld')
-rw-r--r--usr/src/cmd/sgs/rtld/amd64/amd64_elf.c6
-rw-r--r--usr/src/cmd/sgs/rtld/common/analyze.c10
-rw-r--r--usr/src/cmd/sgs/rtld/common/cap.c2
-rw-r--r--usr/src/cmd/sgs/rtld/common/object.c11
-rw-r--r--usr/src/cmd/sgs/rtld/common/rtld.sparc.msg4
-rw-r--r--usr/src/cmd/sgs/rtld/common/setup.c2
-rw-r--r--usr/src/cmd/sgs/rtld/i386/i386_elf.c6
-rw-r--r--usr/src/cmd/sgs/rtld/sparc/common_sparc.c4
-rw-r--r--usr/src/cmd/sgs/rtld/sparc/sparc_elf.c4
-rw-r--r--usr/src/cmd/sgs/rtld/sparcv9/sparc_elf.c5
10 files changed, 30 insertions, 24 deletions
diff --git a/usr/src/cmd/sgs/rtld/amd64/amd64_elf.c b/usr/src/cmd/sgs/rtld/amd64/amd64_elf.c
index 553ace28ba..b2e9584c4e 100644
--- a/usr/src/cmd/sgs/rtld/amd64/amd64_elf.c
+++ b/usr/src/cmd/sgs/rtld/amd64/amd64_elf.c
@@ -408,7 +408,7 @@ elf_reloc_relative(ulong_t relbgn, ulong_t relend, ulong_t relsiz,
if (relbgn >= relend)
break;
- rtype = ELF_R_TYPE(((Rela *)relbgn)->r_info);
+ rtype = ELF_R_TYPE(((Rela *)relbgn)->r_info, M_MACH);
roffset = ((Rela *)relbgn)->r_offset;
} while (rtype == R_AMD64_RELATIVE);
@@ -579,7 +579,7 @@ elf_reloc(Rt_map *lmp, uint_t plt)
while (relbgn < relend) {
uint_t sb_flags = 0;
- rtype = ELF_R_TYPE(((Rela *)relbgn)->r_info);
+ rtype = ELF_R_TYPE(((Rela *)relbgn)->r_info, M_MACH);
/*
* If this is a RELATIVE relocation in a shared object (the
@@ -615,7 +615,7 @@ elf_reloc(Rt_map *lmp, uint_t plt)
if (relbgn >= relend)
break;
- rtype = ELF_R_TYPE(((Rela *)relbgn)->r_info);
+ rtype = ELF_R_TYPE(((Rela *)relbgn)->r_info, M_MACH);
}
roffset = ((Rela *)relbgn)->r_offset;
diff --git a/usr/src/cmd/sgs/rtld/common/analyze.c b/usr/src/cmd/sgs/rtld/common/analyze.c
index 0c6fe92678..6ed3b0473c 100644
--- a/usr/src/cmd/sgs/rtld/common/analyze.c
+++ b/usr/src/cmd/sgs/rtld/common/analyze.c
@@ -897,7 +897,7 @@ trace_so(Rt_map *clmp, Rej_desc *rej, const char *name, const char *path,
/* LINTED */
(void) snprintf(_reject, PATH_MAX,
MSG_INTL(ldd_reject[rej->rej_type]),
- conv_reject_desc(rej, &rej_buf));
+ conv_reject_desc(rej, &rej_buf, M_MACH));
if (rej->rej_name)
path = rej->rej_name;
reject = (char *)_reject;
@@ -1162,7 +1162,7 @@ file_notfound(Lm_list *lml, const char *name, Rt_map *clmp, uint_t flags,
eprintf(lml, ERR_FATAL, MSG_INTL(err_reject[rej->rej_type]),
rej->rej_name ? rej->rej_name : MSG_INTL(MSG_STR_UNKNOWN),
- conv_reject_desc(rej, &rej_buf));
+ conv_reject_desc(rej, &rej_buf, M_MACH));
return;
}
@@ -1364,7 +1364,7 @@ file_open(int err, Lm_list *lml, const char *oname, const char *nname,
}
rej->rej_name = nname;
rej->rej_flag = (fdesc->fd_flags & FLG_FD_ALTER);
- DBG_CALL(Dbg_file_rejected(lml, rej));
+ DBG_CALL(Dbg_file_rejected(lml, rej, M_MACH));
}
return (0);
}
@@ -2232,7 +2232,7 @@ _load_path(Lm_list *lml, Aliste lmco, const char **oname, Rt_map *clmp,
_rej.rej_name = name;
_rej.rej_type = SGS_REJ_STR;
_rej.rej_str = MSG_INTL(MSG_GEN_NOOPEN);
- DBG_CALL(Dbg_file_rejected(lml, &_rej));
+ DBG_CALL(Dbg_file_rejected(lml, &_rej, M_MACH));
rejection_inherit(rej, &_rej);
remove_so(lml, nlmp);
return (0);
@@ -2266,7 +2266,7 @@ _load_path(Lm_list *lml, Aliste lmco, const char **oname, Rt_map *clmp,
_rej.rej_name = name;
_rej.rej_type = SGS_REJ_STR;
_rej.rej_str = strerror(ENOENT);
- DBG_CALL(Dbg_file_rejected(lml, &_rej));
+ DBG_CALL(Dbg_file_rejected(lml, &_rej, M_MACH));
rejection_inherit(rej, &_rej);
return (0);
}
diff --git a/usr/src/cmd/sgs/rtld/common/cap.c b/usr/src/cmd/sgs/rtld/common/cap.c
index 77d38b6c50..be646b40f3 100644
--- a/usr/src/cmd/sgs/rtld/common/cap.c
+++ b/usr/src/cmd/sgs/rtld/common/cap.c
@@ -166,7 +166,7 @@ hwcap_dir(Alist **fdalpp, Lm_list *lml, const char *name, Rt_map *clmp,
_rej.rej_type = SGS_REJ_STR;
_rej.rej_name = name;
_rej.rej_str = strerror(errno);
- DBG_CALL(Dbg_file_rejected(lml, &_rej));
+ DBG_CALL(Dbg_file_rejected(lml, &_rej, M_MACH));
rejection_inherit(rej, &_rej);
return (0);
}
diff --git a/usr/src/cmd/sgs/rtld/common/object.c b/usr/src/cmd/sgs/rtld/common/object.c
index ec5968d7b9..a654b632f2 100644
--- a/usr/src/cmd/sgs/rtld/common/object.c
+++ b/usr/src/cmd/sgs/rtld/common/object.c
@@ -79,8 +79,15 @@ elf_obj_init(Lm_list *lml, Aliste lmco, const char *name)
return (0);
/*
- * Obtain a generic set of entrance criteria (this is the first call to
- * libld.so, which will effectively lazyload it).
+ * Configure libld.so to process objects of the desired target
+ * type (this is the first call to libld.so, which will effectively
+ * lazyload it).
+ */
+ if (ld_init_target(lml, M_MACH) != 0)
+ return (0);
+
+ /*
+ * Obtain a generic set of entrance criteria
*/
if (ld_ent_setup(ofl, syspagsz) == S_ERROR)
return (0);
diff --git a/usr/src/cmd/sgs/rtld/common/rtld.sparc.msg b/usr/src/cmd/sgs/rtld/common/rtld.sparc.msg
index 828789fe7d..bd09eb79c7 100644
--- a/usr/src/cmd/sgs/rtld/common/rtld.sparc.msg
+++ b/usr/src/cmd/sgs/rtld/common/rtld.sparc.msg
@@ -1,5 +1,5 @@
#
-# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# CDDL HEADER START
@@ -37,8 +37,6 @@
value 0x%llx loses %d bits at offset 0x%llx"
@ MSG_REL_NOFIT "relocation error: %s: file %s: symbol %s: \
value 0x%llx does not fit"
-@ MSG_REL_NOSWAP "relocation error: %s: file %s: symbol %s: \
- linker does not support byte swapping relocated data"
@ MSG_REL_BADREG "relocation error: file %s: REGISTER relocation \
against bad register offset: 0x%llx"
diff --git a/usr/src/cmd/sgs/rtld/common/setup.c b/usr/src/cmd/sgs/rtld/common/setup.c
index 04ab939b4d..e798952478 100644
--- a/usr/src/cmd/sgs/rtld/common/setup.c
+++ b/usr/src/cmd/sgs/rtld/common/setup.c
@@ -418,7 +418,7 @@ setup(char **envp, auxv_t *auxv, Word _flags, char *_platform, int _syspagsz,
eprintf(&lml_main, ERR_FATAL,
MSG_INTL(err_reject[rej.rej_type]), argvname,
- conv_reject_desc(&rej, &rej_buf));
+ conv_reject_desc(&rej, &rej_buf, M_MACH));
return (0);
}
diff --git a/usr/src/cmd/sgs/rtld/i386/i386_elf.c b/usr/src/cmd/sgs/rtld/i386/i386_elf.c
index 30569449fe..7335714a6a 100644
--- a/usr/src/cmd/sgs/rtld/i386/i386_elf.c
+++ b/usr/src/cmd/sgs/rtld/i386/i386_elf.c
@@ -385,7 +385,7 @@ elf_reloc_relative(ulong_t relbgn, ulong_t relend, ulong_t relsiz,
if (relbgn >= relend)
break;
- rtype = ELF_R_TYPE(((Rel *)relbgn)->r_info);
+ rtype = ELF_R_TYPE(((Rel *)relbgn)->r_info, M_MACH);
roffset = ((Rel *)relbgn)->r_offset;
} while (rtype == R_386_RELATIVE);
@@ -555,7 +555,7 @@ elf_reloc(Rt_map *lmp, uint_t plt)
while (relbgn < relend) {
uint_t sb_flags = 0;
- rtype = ELF_R_TYPE(((Rel *)relbgn)->r_info);
+ rtype = ELF_R_TYPE(((Rel *)relbgn)->r_info, M_MACH);
/*
* If this is a RELATIVE relocation in a shared object (the
@@ -591,7 +591,7 @@ elf_reloc(Rt_map *lmp, uint_t plt)
}
if (relbgn >= relend)
break;
- rtype = ELF_R_TYPE(((Rel *)relbgn)->r_info);
+ rtype = ELF_R_TYPE(((Rel *)relbgn)->r_info, M_MACH);
}
roffset = ((Rel *)relbgn)->r_offset;
diff --git a/usr/src/cmd/sgs/rtld/sparc/common_sparc.c b/usr/src/cmd/sgs/rtld/sparc/common_sparc.c
index 941a3987b1..4f893a8466 100644
--- a/usr/src/cmd/sgs/rtld/sparc/common_sparc.c
+++ b/usr/src/cmd/sgs/rtld/sparc/common_sparc.c
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
@@ -201,7 +201,7 @@ elf_reloc_relative(ulong_t relbgn, ulong_t relend, ulong_t relsiz,
if (relbgn >= relend)
break;
- rtype = (Byte)ELF_R_TYPE(((Rela *)relbgn)->r_info);
+ rtype = (Byte)ELF_R_TYPE(((Rela *)relbgn)->r_info, M_MACH);
roffset = ((Rela *)relbgn)->r_offset;
} while (rtype == R_SPARC_RELATIVE);
diff --git a/usr/src/cmd/sgs/rtld/sparc/sparc_elf.c b/usr/src/cmd/sgs/rtld/sparc/sparc_elf.c
index be792582f0..635e508fdd 100644
--- a/usr/src/cmd/sgs/rtld/sparc/sparc_elf.c
+++ b/usr/src/cmd/sgs/rtld/sparc/sparc_elf.c
@@ -642,7 +642,7 @@ elf_reloc(Rt_map *lmp, uint_t plt)
Addr vaddr;
uint_t sb_flags = 0;
- rtype = ELF_R_TYPE(((Rela *)relbgn)->r_info);
+ rtype = ELF_R_TYPE(((Rela *)relbgn)->r_info, M_MACH);
/*
* If this is a RELATIVE relocation in a shared object (the
@@ -677,7 +677,7 @@ elf_reloc(Rt_map *lmp, uint_t plt)
}
if (relbgn >= relend)
break;
- rtype = ELF_R_TYPE(((Rela *)relbgn)->r_info);
+ rtype = ELF_R_TYPE(((Rela *)relbgn)->r_info, M_MACH);
}
roffset = ((Rela *)relbgn)->r_offset;
diff --git a/usr/src/cmd/sgs/rtld/sparcv9/sparc_elf.c b/usr/src/cmd/sgs/rtld/sparcv9/sparc_elf.c
index 8c93cbb852..0f56741c08 100644
--- a/usr/src/cmd/sgs/rtld/sparcv9/sparc_elf.c
+++ b/usr/src/cmd/sgs/rtld/sparcv9/sparc_elf.c
@@ -885,7 +885,7 @@ elf_reloc(Rt_map *lmp, uint_t plt)
Addr vaddr;
uint_t sb_flags = 0;
- rtype = (Byte)ELF_R_TYPE(((Rela *)relbgn)->r_info);
+ rtype = (Byte)ELF_R_TYPE(((Rela *)relbgn)->r_info, M_MACH);
/*
* If this is a RELATIVE relocation in a shared object
@@ -921,7 +921,8 @@ elf_reloc(Rt_map *lmp, uint_t plt)
}
if (relbgn >= relend)
break;
- rtype = (Byte)ELF_R_TYPE(((Rela *)relbgn)->r_info);
+ rtype = (Byte)ELF_R_TYPE(((Rela *)relbgn)->r_info,
+ M_MACH);
}
roffset = ((Rela *)relbgn)->r_offset;