Novell came through with the publicly visible information, so this

file may now be distributed.

	* i386-nlmstub.c: New file; debugging stub for i386 NetWare.  Must
	be compiled with NetWare header files and turned into an NLM with
	nlmconv.
This commit is contained in:
Ian Lance Taylor 1993-10-04 23:29:36 +00:00
parent 719cb03ff5
commit ef0faeb6c3
2 changed files with 24 additions and 145 deletions

View File

@ -119,6 +119,7 @@ hppa-pinsn.c
hppa-tdep.c
hppab-nat.c
hppah-nat.c
i386-nlmstub.c
i386-pinsn.c
i386-stub.c
i386-tdep.c
@ -273,8 +274,6 @@ z8k-tdep.c
# energize-patches - Part of Lucid support.
# energize.c - Part of Lucid support.
# energize.h - Part of Lucid support.
# i386-nlmstub.c - i386 NLM stub, not yet distributable because
# it contains Novell proprietary code.
# infrun.hacked.c - An old version of infrun.c that had some
# wait_for_inferior improvements by gnu,
# which were never fully debugged.
@ -295,7 +294,6 @@ energize
energize-patches
energize.c
energize.h
i386-nlmstub.c
infrun.hacked.c
remote-sa.sparc.c
state.c

View File

@ -78,48 +78,14 @@
#include <debugapi.h>
#include <process.h>
/************************************************************************/
/*****************************************************************************
*
* (C) Copyright 1988-1993 Novell, Inc.
* All Rights Reserved.
*
* This program is an unpublished copyrighted work which is proprietary
* to Novell, Inc. and contains confidential information that is not
* to be reproduced or disclosed to any other person or entity without
* prior written consent from Novell, Inc. in each and every instance.
*
* WARNING: Unauthorized reproduction of this program as well as
* unauthorized preparation of derivative works based upon the
* program or distribution of copies by sale, rental, lease or
* lending are violations of federal copyright laws and state trade
* secret laws, punishable by civil and criminal penalties.
*
* $release$
* $modname: loadstuff.h$
* $version: 1.37$
* $date: Fri, Jan 15, 1993$
*
****************************************************************************/
/****************************************************/
/* This information is from Novell. It is not in any of the standard
NetWare header files. */
/* WARNING: THIS IS NOT A COMPLETE OS HEADER FILE - DON'T GET CONFUSED
***********************************************************************
* The information is this file is a subset of the OS LOADER.H.
* This file was created to reveal the LoadDefinitionStrucutre and some
* associated information to Cygnus Support to assist them in their
* efforts to develop GNU netware utilities. Don't confuse this file
* with LOADER.H or any other actually supported NetWare header.
************************************************************************/
struct LoadDefinitionStructure
struct DBG_LoadDefinitionStructure
{
struct LoadDefinitionStructure *LDLink;
struct LoadDefinitionStructure *LDKillLink;
struct LoadDefinitionStructure *LDScanLink;
struct ResourceTagStructure *LDResourceList;
LONG LDIdentificationNumber;
void *reserved1[4];
LONG reserved5;
LONG LDCodeImageOffset;
LONG LDCodeImageLength;
LONG LDDataImageOffset;
@ -127,124 +93,38 @@ struct LoadDefinitionStructure
LONG LDUninitializedDataLength;
LONG LDCustomDataOffset;
LONG LDCustomDataSize;
LONG LDFlags;
LONG LDType;
LONG (*LDInitializationProcedure)(
struct LoadDefinitionStructure *LoadRecord,
struct ScreenStruct *screenID,
BYTE *CommandLine,
BYTE *loadDirectoryPath,
LONG uninitializedDataLength,
LONG fileHandle,
LONG (*ReadRoutine)(
LONG fileHandle,
LONG offset,
void *buffer,
LONG numberOfBytes),
LONG customDataOffset,
LONG customDataSize);
void (*LDExitProcedure)(void);
LONG (*LDCheckUnloadProcedure)(
struct ScreenStruct *screenID);
struct ExternalPublicDefinitionStructure *LDPublics;
BYTE LDFileName[36];
BYTE LDName[128];
LONG *LDCLIBLoadStructure;
LONG *LDNLMDebugger;
LONG LDParentID;
LONG LDReservedForCLIB;
LONG Reserved0;
LONG Reserved1;
void *LDModuleObjectHandle; /* If Instrumented BEW 10/16/90 */
LONG LDMajorVersion;
LONG LDMinorVersion;
LONG LDRevision;
LONG LDYear;
LONG LDMonth;
LONG LDDay;
BYTE *LDCopyright;
LONG LDAllocAvailBytes;
LONG LDAllocFreeCount;
LONG LDLastGarbCollect;
LONG LDAlloc16Lists[64];
LONG LDAlloc256Lists[12];
LONG LDAlloc4kList;
struct DomainStructure *LDDomainID; /* This must be non-zero for the Alloc Hunt code to work right. */
/* It also points to the domain structure. */
struct LoadDefinitionStructure *LDEnvLink;
void *LDAllocPagesListHead;
struct ExternalPublicDefinitionStructure *LDTempPublicList;
LONG LDMessageLanguage; /* for enabling */
BYTE **LDMessages; /* for enabling */
LONG LDMessageCount; /* for enabling */
BYTE *LDHelpFile; /* for enabling */
LONG LDMessageBufferSize; /* for enabling */
LONG LDHelpBufferSize; /* for enabling */
LONG LDSharedCodeOffset; /* for protection */
LONG LDSharedCodeLength; /* for protection */
LONG LDSharedDataOffset; /* for protection */
LONG LDSharedDataLength; /* for protection */
LONG (*LDSharedInitProcedure)(
struct LoadDefinitionStructure *LoadRecord,
struct ScreenStruct *screenID,
BYTE *CommandLine);
void (*LDSharedExitProcedure)(void);
LONG LDRPCDataTable;
LONG LDRealRPCDataTable;
LONG LDRPCDataTableSize;
LONG LDNumberOfReferencedPublics;
struct ExternalPublicDefinitionStructure **LDReferencedPublics;
LONG LDNumberOfReferencedExports;
LONG reserved6[2];
LONG (*LDInitializationProcedure)(void);
};
/* define the LDFlags. */
#define LDModuleIsReEntrantBit 0x00000001
#define LDModuleCanBeMultiplyLoadedBit 0x00000002
#define LDSynchronizeStart 0x00000004
#define LDPseudoPreemptionBit 0x00000008
#define LDLoadInOSDomain 0x00000010
#define LDDontUnloadBit 0x20000000
#define LDModuleIsBeingDebugged 0x40000000
#define LDMemoryOn4KBoundriesBit 0x80000000
/* LoadModule load options */
#define LO_NORMAL 0x0000
#define LO_STARTUP 0x0001
#define LO_PROTECT 0x0002
#define LO_DEBUG 0x0004
#define LO_AUTO_LOAD 0x0008
#define LO_DONT_PROMPT 0x0010
#define LO_LOAD_LOW 0x0020
#define LO_RETURN_HANDLE 0x0040
#define LO_LOAD_SILENT 0x0080
#define LO_NORMAL 0x0000
#define LO_STARTUP 0x0001
#define LO_PROTECT 0x0002
#define LO_DEBUG 0x0004
#define LO_AUTO_LOAD 0x0008
/* Loader returned error codes */
#define LOAD_COULD_NOT_FIND_FILE 1
#define LOAD_ERROR_READING_FILE 2
#define LOAD_NOT_NLM_FILE_FORMAT 3
#define LOAD_COULD_NOT_FIND_FILE 1
#define LOAD_ERROR_READING_FILE 2
#define LOAD_NOT_NLM_FILE_FORMAT 3
#define LOAD_WRONG_NLM_FILE_VERSION 4
#define LOAD_REENTRANT_INITIALIZE_FAILURE 5
#define LOAD_CAN_NOT_LOAD_MULTIPLE_COPIES 6
#define LOAD_ALREADY_IN_PROGRESS 7
#define LOAD_ALREADY_IN_PROGRESS 7
#define LOAD_NOT_ENOUGH_MEMORY 8
#define LOAD_INITIALIZE_FAILURE 9
#define LOAD_INITIALIZE_FAILURE 9
#define LOAD_INCONSISTENT_FILE_FORMAT 10
#define LOAD_CAN_NOT_LOAD_AT_STARTUP 11
#define LOAD_AUTO_LOAD_MODULES_NOT_LOADED 12
#define LOAD_UNRESOLVED_EXTERNAL 13
#define LOAD_UNRESOLVED_EXTERNAL 13
#define LOAD_PUBLIC_ALREADY_DEFINED 14
#define LOAD_XDC_DATA_ERROR 15
#define LOAD_NOT_OS_DOMAIN 16
/****************************************************************************/
/****************************************************/
/* The main thread ID. */
static int mainthread;
/* The LoadDefinitionStructure of the NLM being debugged. */
static struct LoadDefinitionStructure *handle;
static struct DBG_LoadDefinitionStructure *handle;
/* Whether we have connected to gdb. */
static int talking;
@ -727,7 +607,8 @@ handle_exception (T_StackFrame *old_frame)
if (frame->ExceptionNumber == START_NLM_EVENT
&& handle == NULL)
{
handle = (struct LoadDefinitionStructure *) frame->ExceptionErrorCode;
handle = ((struct DBG_LoadDefinitionStructure *)
frame->ExceptionErrorCode);
first_insn = *(char *) handle->LDInitializationProcedure;
*(unsigned char *) handle->LDInitializationProcedure = 0xcc;
return RETURN_TO_PROGRAM;