summaryrefslogtreecommitdiff
path: root/libexec/ld.so/mips/archdep.h
diff options
context:
space:
mode:
authorDale S. Rahn <rahnds@cvs.openbsd.org>2000-06-13 03:34:18 +0000
committerDale S. Rahn <rahnds@cvs.openbsd.org>2000-06-13 03:34:18 +0000
commitfe1bdbab88774dd0b581b085d5bd355f2b2ab86b (patch)
tree7fec591016d5f0ccde0ed562abed828e9c5c0a91 /libexec/ld.so/mips/archdep.h
parent6e274593757db3e32991b92a21cdd60081006e3d (diff)
Initial import of ELF ld.so. This was written indepently of the gnu rtld
code and is fully BSD copyrighted. This initial import contains a mostly working mips and partially working powerpc version. No support for ld.so.hints or system run path exists.
Diffstat (limited to 'libexec/ld.so/mips/archdep.h')
-rw-r--r--libexec/ld.so/mips/archdep.h132
1 files changed, 132 insertions, 0 deletions
diff --git a/libexec/ld.so/mips/archdep.h b/libexec/ld.so/mips/archdep.h
new file mode 100644
index 00000000000..0a7eba55a13
--- /dev/null
+++ b/libexec/ld.so/mips/archdep.h
@@ -0,0 +1,132 @@
+/* $OpenBSD: archdep.h,v 1.1 2000/06/13 03:34:13 rahnds Exp $ */
+
+/*
+ * Copyright (c) 1998 Per Fogelstrom, Opsycon AB
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed under OpenBSD by
+ * Per Fogelstrom, Opsycon AB, Sweden.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#ifndef _MIPS_ARCHDEP_H_
+#define _MIPS_ARCHDEP_H_
+
+#define DL_MALLOC_ALIGN 4 /* Arch constraint or otherwise */
+
+#define MACHID EM_MIPS /* ELF e_machine ID value checked */
+
+#define RELTYPE Elf32_Rel
+#define RELSIZE sizeof(Elf32_Rel)
+
+/*
+ * Simple reloc of REL32's. Used by bootstrapping.
+ */
+#define SIMPLE_RELOC(r, s, p, v) \
+ if(ELF32_R_TYPE((r)->r_info) == R_MIPS_REL32) { \
+ if(ELF32_ST_BIND((s)->st_info) == STB_LOCAL && \
+ (ELF32_ST_TYPE((s)->st_info) == STT_SECTION || \
+ ELF32_ST_TYPE((s)->st_info) == STT_NOTYPE) ) { \
+ *(p) += (v); \
+ } \
+ else { \
+ *(p) = (v) + (s)->st_value; \
+ } \
+ }
+
+/*
+ * The following functions are declared inline so they can
+ * be used before bootstrap linking has been finished.
+ */
+extern inline void
+_dl_wrstderr(const char *s)
+{
+ while(*s) {
+ _dl_write(2, s, 1);
+ s++;
+ }
+}
+
+extern inline void *
+_dl_memset(void *p, const char v, size_t c)
+{
+ char *ip = p;
+
+ while(c--)
+ *ip++ = v;
+ return(p);
+}
+
+extern inline int
+_dl_strlen(const char *p)
+{
+ const char *s = p;
+
+ while(*s != '\0')
+ s++;
+ return(s - p);
+}
+
+extern inline char *
+_dl_strcpy(char *d, const char *s)
+{
+ char *rd = d;
+
+ while((*d++ = *s++) != '\0');
+
+ return(rd);
+}
+
+extern inline int
+_dl_strncmp(const char *d, const char *s, int c)
+{
+ while(c-- && *d && *d++ == *s++) {};
+ if(c < 0) {
+ return(0);
+ }
+ return(d[-1] - s[-1]);
+}
+
+extern inline int
+_dl_strcmp(const char *d, const char *s)
+{
+ while(*d && *d++ == *s++) {};
+ return(d[-1] - s[-1]);
+}
+
+extern inline const char *
+_dl_strchr(const char *p, const int c)
+{
+ while(*p) {
+ if(*p == c) {
+ return(p);
+ }
+ p++;
+ }
+ return(0);
+}
+
+#endif /* _MIPS_ARCHDEP_H_ */