diff options
Diffstat (limited to 'src/backend/port/ultrix4')
-rw-r--r-- | src/backend/port/ultrix4/Makefile.inc | 27 | ||||
-rw-r--r-- | src/backend/port/ultrix4/dl.h | 117 | ||||
-rw-r--r-- | src/backend/port/ultrix4/dynloader.c | 68 | ||||
-rw-r--r-- | src/backend/port/ultrix4/machine.h | 19 | ||||
-rw-r--r-- | src/backend/port/ultrix4/port-protos.h | 36 | ||||
-rw-r--r-- | src/backend/port/ultrix4/port.c | 25 | ||||
-rw-r--r-- | src/backend/port/ultrix4/strdup.c | 23 |
7 files changed, 315 insertions, 0 deletions
diff --git a/src/backend/port/ultrix4/Makefile.inc b/src/backend/port/ultrix4/Makefile.inc new file mode 100644 index 00000000000..fca568f5d5d --- /dev/null +++ b/src/backend/port/ultrix4/Makefile.inc @@ -0,0 +1,27 @@ +#------------------------------------------------------------------------- +# +# Makefile.inc-- +# Makefile for port/ultrix (Ultrix4.x specific stuff) +# +# Copyright (c) 1994, Regents of the University of California +# +# +# IDENTIFICATION +# $Header: /cvsroot/pgsql/src/backend/port/ultrix4/Attic/Makefile.inc,v 1.1.1.1 1996/07/09 06:21:45 scrappy Exp $ +# +#------------------------------------------------------------------------- + +CFLAGS+= -DNEED_ISINF -DUSE_POSIX_TIME + +LDADD+= -ldl -lln + +# +# The YACC grammar is too big.. +# +#.if !defined(CDEBUG) +#CFLAGS+= -Olimit 2000 +#.endif + +HEADERS+= dl.h machine.h port-protos.h + +SUBSRCS+= dynloader.c port.c strdup.c diff --git a/src/backend/port/ultrix4/dl.h b/src/backend/port/ultrix4/dl.h new file mode 100644 index 00000000000..bca3602a21c --- /dev/null +++ b/src/backend/port/ultrix4/dl.h @@ -0,0 +1,117 @@ +/*------------------------------------------------------------------------- + * + * dl.h-- + * + * + * + * Copyright (c) 1994, Regents of the University of California + * + * $Id: dl.h,v 1.1.1.1 1996/07/09 06:21:45 scrappy Exp $ + * + *------------------------------------------------------------------------- + */ +/* + * Ultrix 4.x Dynamic Loader Library Version 1.0 + * + * dl.h-- + * header file for the Dynamic Loader Library + * + * + * Copyright (c) 1993 Andrew K. Yu, University of California at Berkeley + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for educational, research, and non-profit purposes and + * without fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright notice and + * this permission notice appear in supporting documentation. Permission + * to incorporate this software into commercial products can be obtained + * from the author. The University of California and the author make + * no representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + */ +#ifndef _DL_HEADER_ +#define _DL_HEADER_ + +#include <filehdr.h> +#include <syms.h> +#include <ldfcn.h> +#include <reloc.h> +#include <scnhdr.h> + + +typedef long CoreAddr; + + +typedef struct ScnInfo { + CoreAddr addr; /* starting address of the section */ + SCNHDR hdr; /* section header */ + RELOC *relocEntries; /* relocation entries */ +} ScnInfo; + +typedef enum { + DL_NEEDRELOC, /* still need relocation */ + DL_RELOCATED, /* no relocation necessary */ + DL_INPROG /* relocation in progress */ +} dlRStatus; + +typedef struct JmpTbl { + char *block; /* the jump table memory block */ + struct JmpTbl *next; /* next block */ +} JmpTbl; + +typedef struct dlFile { + char *filename; /* file name of the object file */ + + int textSize; /* used by mprotect */ + CoreAddr textAddress; /* start addr of text section */ + long textVaddr; /* vaddr of text section in obj file */ + CoreAddr rdataAddress; /* start addr of rdata section */ + long rdataVaddr; /* vaddr of text section in obj file */ + CoreAddr dataAddress; /* start addr of data section */ + long dataVaddr; /* vaddr of text section in obj file */ + CoreAddr bssAddress; /* start addr of bss section */ + long bssVaddr; /* vaddr of text section in obj file */ + + int nsect; /* number of sections */ + ScnInfo *sect; /* details of each section (array) */ + + int issExtMax; /* size of string space */ + char *extss; /* extern sym string space (in core) */ + int iextMax; /* maximum number of Symbols */ + pEXTR extsyms; /* extern syms */ + + dlRStatus relocStatus; /* what relocation needed? */ + int needReloc; + + JmpTbl *jmptable; /* the jump table for R_JMPADDR */ + + struct dlFile *next; /* next member of the archive */ +} dlFile; + +typedef struct dlSymbol { + char *name; /* name of the symbol */ + long addr; /* address of the symbol */ + dlFile *objFile; /* from which file */ +} dlSymbol; + +/* + * prototypes for the dl* interface + */ +extern void *dl_open(/* char *filename, int mode */); +extern void *dl_sym(/* void *handle, char *name */); +extern void dl_close(/* void *handle */); +extern char *dl_error(/* void */); + +#define DL_LAZY 0 /* lazy resolution */ +#define DL_NOW 1 /* immediate resolution */ + +/* + * Miscellaneous utility routines: + */ +extern char **dl_undefinedSymbols(/* int *count */); +extern void dl_printAllSymbols(/* void *handle */); +extern void dl_setLibraries(/* char *libs */); + +#endif _DL_HEADER_ diff --git a/src/backend/port/ultrix4/dynloader.c b/src/backend/port/ultrix4/dynloader.c new file mode 100644 index 00000000000..887dff44abd --- /dev/null +++ b/src/backend/port/ultrix4/dynloader.c @@ -0,0 +1,68 @@ +/*------------------------------------------------------------------------- + * + * dynloader.c-- + * This dynamic loader uses Andrew Yu's libdl-1.0 package for Ultrix 4.x. + * (Note that pg_dlsym and pg_dlclose are actually macros defined in + * "port-protos.h".) + * + * Copyright (c) 1994, Regents of the University of California + * + * + * IDENTIFICATION + * $Header: /cvsroot/pgsql/src/backend/port/ultrix4/Attic/dynloader.c,v 1.1.1.1 1996/07/09 06:21:45 scrappy Exp $ + * + *------------------------------------------------------------------------- + */ +#include <stdio.h> +#include "dl.h" +#include "c.h" +#include "fmgr.h" +#include "port-protos.h" +#include "utils/elog.h" + +extern char pg_pathname[]; + +void * +pg_dlopen(char *filename) +{ + static int dl_initialized= 0; + void *handle; + + /* + * initializes the dynamic loader with the executable's pathname. + * (only needs to do this the first time pg_dlopen is called.) + */ + if (!dl_initialized) { + if (!dl_init(pg_pathname)) { + return NULL; + } + /* + * if there are undefined symbols, we want dl to search from the + * following libraries also. + */ + dl_setLibraries("/usr/lib/libm_G0.a:/usr/lib/libc_G0.a"); + dl_initialized= 1; + } + + /* + * open the file. We do the symbol resolution right away so that we + * will know if there are undefined symbols. (This is in fact the + * same semantics as "ld -A". ie. you cannot have undefined symbols. + */ + if ((handle=dl_open(filename, DL_NOW))==NULL) { + int count; + char **list= dl_undefinedSymbols(&count); + + /* list the undefined symbols, if any */ + if(count) { + elog(NOTICE, "dl: Undefined:"); + while(*list) { + elog(NOTICE, " %s", *list); + list++; + } + } + } + + return (void *)handle; +} + diff --git a/src/backend/port/ultrix4/machine.h b/src/backend/port/ultrix4/machine.h new file mode 100644 index 00000000000..35fe7afe61e --- /dev/null +++ b/src/backend/port/ultrix4/machine.h @@ -0,0 +1,19 @@ +/*------------------------------------------------------------------------- + * + * machine.h-- + * + * + * + * Copyright (c) 1994, Regents of the University of California + * + * $Id: machine.h,v 1.1.1.1 1996/07/09 06:21:45 scrappy Exp $ + * + *------------------------------------------------------------------------- + */ +#ifndef MACHINE_H +#define MACHINE_H + +#define BLCKSZ 8192 + +#endif + diff --git a/src/backend/port/ultrix4/port-protos.h b/src/backend/port/ultrix4/port-protos.h new file mode 100644 index 00000000000..ed055dd19c0 --- /dev/null +++ b/src/backend/port/ultrix4/port-protos.h @@ -0,0 +1,36 @@ +/*------------------------------------------------------------------------- + * + * port-protos.h-- + * prototypes for Ultrix-specific routines + * + * + * Copyright (c) 1994, Regents of the University of California + * + * $Id: port-protos.h,v 1.1.1.1 1996/07/09 06:21:45 scrappy Exp $ + * + *------------------------------------------------------------------------- + */ +#ifndef PORT_PORTOS_H +#define PORT_PORTOS_H + +#include "utils/dynamic_loader.h" +#include "dl.h" + +/* dynloader.c */ +/* + * New dynamic loader. + * + * This dynamic loader uses Andrew Yu's libdl-1.0 package for Ultrix 4.x. + * (Note that pg_dlsym and pg_dlclose are actually macros defined in + * "port-protos.h".) + */ + +#define pg_dlsym(h, f) ((func_ptr)dl_sym(h, f)) +#define pg_dlclose(h) dl_close(h) +#define pg_dlerror() dl_error() + +/* port.c */ + +extern void init_address_fixup(void); + +#endif /* PORT_PORTOS_H */ diff --git a/src/backend/port/ultrix4/port.c b/src/backend/port/ultrix4/port.c new file mode 100644 index 00000000000..6ece3210ec1 --- /dev/null +++ b/src/backend/port/ultrix4/port.c @@ -0,0 +1,25 @@ +/*------------------------------------------------------------------------- + * + * port.c-- + * Ultrix-specific routines + * + * Copyright (c) 1994, Regents of the University of California + * + * + * IDENTIFICATION + * $Header: /cvsroot/pgsql/src/backend/port/ultrix4/Attic/port.c,v 1.1.1.1 1996/07/09 06:21:45 scrappy Exp $ + * + *------------------------------------------------------------------------- + */ +#include <sys/syscall.h> +#include <sys/sysmips.h> + +#include "c.h" + +void +init_address_fixup() +{ +#ifdef NOFIXADE + syscall(SYS_sysmips, MIPS_FIXADE, 0, NULL, NULL, NULL); +#endif /* NOFIXADE */ +} diff --git a/src/backend/port/ultrix4/strdup.c b/src/backend/port/ultrix4/strdup.c new file mode 100644 index 00000000000..f140711226e --- /dev/null +++ b/src/backend/port/ultrix4/strdup.c @@ -0,0 +1,23 @@ +/*------------------------------------------------------------------------- + * + * strdup.c-- + * copies a null-terminated string. + * + * Copyright (c) 1994, Regents of the University of California + * + * + * IDENTIFICATION + * $Header: /cvsroot/pgsql/src/backend/port/ultrix4/Attic/strdup.c,v 1.1.1.1 1996/07/09 06:21:45 scrappy Exp $ + * + *------------------------------------------------------------------------- + */ +#include <string.h> + +char * +strdup(char *string) +{ + char *nstr; + + nstr = strcpy((char *)palloc(strlen(string)+1), string); + return nstr; +} |