/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* bos720 src/bos/usr/include/rtinit.h 1.2                                */
/*                                                                        */
/* Licensed Materials - Property of IBM                                   */
/*                                                                        */
/* Restricted Materials of IBM                                            */
/*                                                                        */
/* COPYRIGHT International Business Machines Corp. 1996                   */
/* All Rights Reserved                                                    */
/*                                                                        */
/* US Government Users Restricted Rights - Use, duplication or            */
/* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.      */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */
/* @(#)50	1.2  src/bos/usr/include/rtinit.h, libld, bos720 1/12/96 17:55:44 */
/*
 *   COMPONENT_NAME: libld
 *
 *   FUNCTIONS: none
 *
 *   ORIGINS: 27
 *
 *
 *   (C) COPYRIGHT International Business Machines Corp. 1996
 *   All Rights Reserved
 *   Licensed Materials - Property of IBM
 *   US Government Users Restricted Rights - Use, duplication or
 *   disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
 */

#ifndef _H_RTINIT
#define _H_RTINIT

/* Name of loader-section symbol for __RTINIT structure.
   If symbol exists, it must be first. */
#define RTINIT_NAME "__rtinit"

typedef struct __rtinit_descriptor __RTINIT_DESCRIPTOR;
typedef struct __rtinit {
    int		(*rtl)();		/* Pointer to runtime linker */
    int		init_offset;		/* Offset to array of init functions
					   (0 if none). */
    int		fini_offset;		/* Offset to array of fini functions
					   (0 if none). */
    int		__rtinit_descriptor_size; /* Size of __RTINIT_DESCRIPTOR.
					   This value should be used instead
					   of sizeof(__RTINIT_DESCRIPTOR). */
} __RTINIT;

typedef void __INITFINI_T(const void *,	/* This parameter is NULL if the module
					   being initialized was loaded at exec
					   time.  Otherwise, a call to load()
					   is in progress, and this argument
					   will be the value to be returned by
					   load(). */
	      __RTINIT *,		/* Pointer to this module's
					   __rtinit symbol. */
	      __RTINIT_DESCRIPTOR *);	/* Pointer to this function's
					   __RTINIT_DESCRIPTOR. */

struct __rtinit_descriptor {
    __INITFINI_T	*f;		/* Init/fini function. */
    int			name_offset;	/* Offset (within __rtinit symbol)
					   to name of function. */
    unsigned char	flags;		/* Flags */
#define _RT_CALLED 0x80			/* If flag is set, function is not
					   called.  Otherwise, flag is set
					   before calling function. */
};

#endif /* _H_RTINIT */