Path: blob/master/runtime/dbgext/dbgext_internal.h
5986 views
/*******************************************************************************1* Copyright (c) 1991, 2021 IBM Corp. and others2*3* This program and the accompanying materials are made available under4* the terms of the Eclipse Public License 2.0 which accompanies this5* distribution and is available at https://www.eclipse.org/legal/epl-2.0/6* or the Apache License, Version 2.0 which accompanies this distribution and7* is available at https://www.apache.org/licenses/LICENSE-2.0.8*9* This Source Code may also be made available under the following10* Secondary Licenses when the conditions for such availability set11* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU12* General Public License, version 2 with the GNU Classpath13* Exception [1] and GNU General Public License, version 2 with the14* OpenJDK Assembly Exception [2].15*16* [1] https://www.gnu.org/software/classpath/license.html17* [2] http://openjdk.java.net/legal/assembly-exception.html18*19* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception20*******************************************************************************/2122#ifndef dbgext_internal_h23#define dbgext_internal_h2425/**26* @file dbgext_internal.h27* @brief Internal prototypes used within the DBGEXT module.28*29* This file contains implementation-private function prototypes and30* type definitions for the DBGEXT module.31*32*/3334#include "j9.h"35#include "j9comp.h"36#include "dbgext_api.h"37#include "jni.h"38#if defined(J9VM_OPT_SHARED_CLASSES)39#include "shcdatatypes.h"40#endif4142#ifdef __cplusplus43extern "C" {44#endif454647/* ---------------- dbgpool.c ---------------- */4849/**50* @typedef51* @struct52*/53typedef struct J9PoolWalkData {54UDATA counter;55J9Pool *head;56J9PoolPuddle *puddle;57} J9PoolWalkData;5859/**60* @brief61* @param *aPool62* @param (*aFunction)(void*, J9PoolWalkData*)63* @param *userData64* @return void65*/66void67walkAndCall(J9Pool *aPool, void (*aFunction)(void*,J9PoolWalkData*), J9PoolWalkData *userData);686970/**71* @brief72* @param *args73* @return void74*/75void76dbgext_walkj9pool(const char *args);777879/**80* @brief81* @param addr82* @return J9Pool *83*/84J9Pool *85dbgMapPool(UDATA addr);868788/**89* @brief90* @param *pool91* @return void92*/93void94dbgUnmapPool(J9Pool *pool);959697/**98* @brief99* @param *addr100* @param *data101* @return void102*/103void104defaultJ9PoolWalkPFunc(void *addr, J9PoolWalkData *data);105106107/**108* @brief109* @param addr110* @param (*pFunc)(void*111* @param J9PoolWalkData*)112* @param J9PoolWalkData*data113* @return void114*/115void116walkJ9Pool(UDATA addr, void (*pFunc)(void*,J9PoolWalkData*), J9PoolWalkData*data);117118119/* ---------------- j9dbgext.c ---------------- */120121/**122* @brief123* @param stringObject124* @param athread125* @return char *126*/127char *128copyStringIntoUTF8(J9VMThread* athread, j9object_t stringObject);129130131/**132* @brief133* @param state134* @param vm135* @param flags136* @return J9ClassLoader*137*/138J9ClassLoader*139dbgAllClassLoadersStartDo(J9ClassLoaderWalkState* state, J9JavaVM* vm, UDATA flags);140141142/**143* @brief144* @param state145* @return J9ClassLoader*146*/147J9ClassLoader*148dbgAllClassLoadersNextDo(J9ClassLoaderWalkState* state);149150151/**152* @brief153* @param state154* @return J9Class*155*/156J9Class *157dbgAllClassesNextDo(J9ClassWalkState* state);158159160/**161* @brief162* @param state163* @param vmPtr164* @param classLoader165* @return J9Class*166*/167J9Class *168dbgAllClassesStartDo(J9ClassWalkState* state, J9JavaVM* vmPtr, J9ClassLoader* classLoader);169170171/**172* @brief173* @param state174* @return J9ROMClass*175*/176J9ROMClass*177dbgAllROMClassesNextDo(J9ClassWalkState* state);178179180/**181* @brief182* @param state183* @param vmPtr184* @param classLoader185* @return J9ROMClass*186*/187J9ROMClass*188dbgAllROMClassesStartDo(J9ClassWalkState* state, J9JavaVM* vmPtr, J9ClassLoader* classLoader);189190191/**192* @brief193* @param romMethod194* @return J9ROMMethod*195*/196J9ROMMethod*197dbgNextROMMethod(J9ROMMethod *romMethod);198199200#if (defined(J9VM_INTERP_NATIVE_SUPPORT))201/**202* @brief203* @param remoteTree204* @param searchValue205* @return struct J9JITHashTable *206*/207struct J9JITHashTable *208dbgAvlSearch(J9AVLTree * remoteTree, UDATA searchValue);209#endif /* J9VM_INTERP_NATIVE_SUPPORT */210211212/**213* @brief214* @param *remoteList215* @return void216*/217void218dbgDumpSegmentList(void *remoteList);219220221/**222* @brief223* @param format224* @param ...225* @return void226*/227void228dbgError(const char* format, ...);229230231/**232* @brief233* @param *args234* @return void235*/236void237dbgext_bytecodes(const char *args);238239240/**241* @brief242* @param *args243* @return void244*/245void246dbgext_dumpallclassloaders(const char *args);247248249/**250* @brief251* @param *args252* @return void253*/254void255dbgext_dumpallsegments(const char *args);256257/**258* @brief259* @param *args260* @return void261*/262void263dbgext_dumpjitmethodstore(const char *args);264265266/**267* @brief268* @param *args269* @return void270*/271void272dbgext_dumpromclass(const char *args);273274275/**276* @brief277* @param *args278* @return void279*/280void281dbgext_dumpallromclasslinear(const char *args);282283284/**285* @brief286* @param *args287* @return void288*/289void290dbgext_dumpromclasslinear(const char *args);291292293/**294* @brief295* @param *args296* @return void297*/298void299dbgext_queryromclass(const char *args);300301302/**303* @brief304* @param *args305* @return void306*/307void308dbgext_dumpsegmentsinlist(const char *args);309310311/**312* @brief313* @param *args314* @return void315*/316void dbgext_findmethodfrompc(const char *args);317318319/**320* @brief321* @param *args322* @return void323*/324void325dbgext_findstackvalue(const char *args);326327328/**329* @brief330* @param *args331* @return void332*/333void334dbgext_findvm(const char *args);335336337/**338* @brief339* @param *args340* @return void341*/342void343dbgext_j9help(const char *args);344345346/**347* @brief348* @param *args349* @return void350*/351void352dbgext_j9reg(const char *args);353354355/**356* @brief357* @param *args358* @return void359*/360void361dbgext_jextract(const char *args);362363364/**365* @brief366* @param *args367* @return void368*/369void370dbgext_jitmetadatafrompc(const char *args);371372373/**374* @brief375* @param *args376* @return void377*/378void379dbgext_jitstack(const char *args);380381382/**383* @brief384* @param *args385* @return void386*/387void388dbgext_jitstackslots(const char *args);389390391/**392* @brief393* @param *args394* @return void395*/396void397dbgext_localmap(const char *args);398399400/**401* @brief402* @param *args403* @return void404*/405void406dbgext_setvm(const char *args);407408409/**410* @brief411* @param *args412* @return void413*/414void415dbgext_stack(const char *args);416417418/**419* @brief420* @param *args421* @return void422*/423void424dbgext_stackmap(const char *args);425426427/**428* @brief429* @param *args430* @return void431*/432void433dbgext_stackslots(const char *args);434435436/**437* @brief438* @param *args439* @return void440*/441void442dbgext_slots(const char *args);443444/**445* @brief446* @param *args447* @return void448*/449void450dbgext_module(const char *args);451452453/**454* @brief455* @param *args456* @return void457*/458void459dbgext_threads(const char *args);460461/**462* @brief463* @param *args464* @return void465*/466void467dbgext_findcallsite(const char *args);468469/**470* @brief471* @param *args472* @return void473*/474void475dbgext_findfreedcallsite(const char *args);476477/**478* @brief479* @param *args480* @return void481*/482void483dbgext_findallcallsites(const char *args);484485/**486* @brief487* @param *args488* @return void489*/490void491dbgext_findfreedcallsites(const char *args);492493/**494* @brief495* @param *args496* @return void497*/498void499dbgext_printallcallsites(const char *args);500501502/**503* @brief504* @param *args505* @return void506*/507void508dbgext_printfreedcallsites(const char *args);509510511/**512* @brief513* @param *args514* @return void515*/516void517dbgext_findheader(const char *args);518519/**520* @brief521* @param *args522* @return void523*/524void525dbgext_findpattern(const char *args);526527/**528* @brief529* @param *args530* @return void531*/532533void534dbgext_fj9object(const char *args);535536/**537* @brief538* @param *args539* @return void540*/541void542dbgext_j9objecttofj9object(const char *args);543544/**545* @brief546* @param *args547* @return void548*/549void550dbgext_fj9objecttoj9object(const char *args);551552#if (defined(J9VM_INTERP_NATIVE_SUPPORT))553/**554* @brief555* @param *remoteTree556* @param searchValue557* @return struct J9JITExceptionTable *558*/559struct J9JITExceptionTable *560dbgFindJITMetaData(J9AVLTree *remoteTree, UDATA searchValue);561#endif /* J9VM_INTERP_NATIVE_SUPPORT */562563564/**565* @brief566* @param pattern567* @param patternLength568* @param patternAlignment569* @param startSearchFrom570* @param bytesToSearch571* @param bytesSearched572* @return void*573*/574void*575dbgFindPatternInRange(U_8* pattern, UDATA patternLength, UDATA patternAlignment, U_8* startSearchFrom, UDATA bytesToSearch, UDATA* bytesSearched);576577578/**579* @brief580* @param addr581* @return void582*/583void584dbgFree(void * addr);585586587/**588* @brief589* @param void590* @return void591*/592void593dbgFreeAll(void);594595596/**597* @brief598* @param *clazzAddr599* @return char *600*/601char *602dbgGetClassNameFromROMClass(void *clazzAddr);603604605/**606* @brief607* @param *clazzAddr608* @return char *609*/610char *611dbgGetClassNameFromClass(void *clazzAddr);612613614/**615* @brief616* @param *addr617* @return char *618*/619char *620dbgGetClassNameFromObject(void *addr);621622623/**624* @brief625* @param addr626* @return UDATA627*/628UDATA629dbgGetLocalBlockRelocated(void * addr);630631632/**633* @brief634* @param vmPtr635* @param pc636* @return J9Method *637*/638J9Method *639dbgGetMethodFromPC(void* vmPtr, const U_8* pc);640641642/**643* @brief644* @param *currentThread645* @param *pc646* @param *constantPool647* @return J9Method *648*/649J9Method *650dbgGetMethodFromPCAndConstantPool(J9VMThread *currentThread, const U_8 *pc, const J9ConstantPool *constantPool);651652653/**654* @brief655* @param *ramMethodAddr656* @return char *657*/658char *659dbgGetNameFromRAMMethod(void *ramMethodAddr);660661662/**663* @brief664* @param *remoteROMMethod665* @param *ramClassName666* @return char *667*/668char *669dbgGetNameFromROMMethod(J9ROMMethod *remoteROMMethod, char *ramClassName);670671672/**673* @brief674* @param void675* @return J9PortLibrary *676*/677J9PortLibrary *678dbgGetPortLibrary(void);679680681/**682* @brief683* @param *ptr684* @return char *685*/686char *687dbgGetStringFromUTF(void *ptr);688689690/**691* @brief692* @param void693* @return void*694*/695void* dbgGetThreadLibrary(void);696697698/**699* @brief700* @param addr701* @return void *702*/703void *704dbgLocalToTarget(void * addr);705706j9object_t707mapFJ9objectToJ9object(fj9object_t fieldObject);708709/**710* @brief711* @param size712* @param *originalAddress713* @return void *714*/715void *716dbgMalloc(UDATA size, void *originalAddress);717718719/**720* @brief721* @param size722* @param remoteAddress723* @return void *724*/725void *726dbgMallocAndRead(UDATA size, void * remoteAddress);727728729/**730* @brief731* @param address732* @return UDATA733*/734UDATA735dbgObjectSizeInBytes(j9object_t address);736737738/**739* @brief740* @param *address741* @param **cachePtr742* @return UDATA743*/744UDATA745dbgObjectSizeInBytesCached(j9object_t address, J9HashTable **cachePtr);746747748/**749* @brief750* @param originalArgs751* @param argValues752* @param maxArgs753* @return UDATA754*/755UDATA756dbgParseArgs(const char * originalArgs, UDATA * argValues, UDATA maxArgs);757758759/**760* @brief761* @param localThread762* @return UDATA763*/764UDATA765dbgPrepareThreadForStackWalk(J9VMThread * localThread);766767768/**769* @brief770* @param message771* @param ...772* @return void773*/774void775dbgPrint (const char* message, ...);776777778/**779* @brief780* @param remoteAddress781* @return U_8782*/783U_8784dbgReadByte(U_8 * remoteAddress);785786787/**788* @brief789* @param remoteClass790* @return J9Class *791*/792J9Class *793dbgReadClass(J9Class * remoteClass);794795796/**797* @brief798* @param remoteObject799* @return J9Object *800*/801J9Object *802dbgReadObject(J9Object * remoteObject);803804805/**806* @brief807* @param remoteCP808* @return J9ConstantPool *809*/810J9ConstantPool *811dbgReadCP(J9ConstantPool * remoteCP);812813814/**815* @brief816* @param remoteVM817* @return J9JavaVM *818*/819J9JavaVM *820dbgReadJavaVM(J9JavaVM * remoteVM);821822823struct J9JITHashTable;824#if (defined(J9VM_INTERP_NATIVE_SUPPORT))825/**826* @brief827* @param remoteTable828* @return struct J9JITHashTable *829*/830struct J9JITHashTable *831dbgReadJITHashTable(struct J9JITHashTable* remoteTable);832#endif /* J9VM_INTERP_NATIVE_SUPPORT */833834835struct J9JITExceptionTable;836#if (defined(J9VM_INTERP_NATIVE_SUPPORT))837/**838* @brief839* @param *remoteMetaData840* @return struct J9JITExceptionTable *841*/842struct J9JITExceptionTable *843dbgReadJITMetaData(struct J9JITExceptionTable *remoteMetaData);844#endif /* J9VM_INTERP_NATIVE_SUPPORT */845846847/**848* @brief849* @param remoteMethod850* @return J9Method *851*/852J9Method * dbgReadMethod(J9Method * remoteMethod);853854855/**856* @brief857* @param remotePool858* @return J9Pool *859*/860J9Pool *861dbgReadPool(J9Pool* remotePool);862863864/**865* @brief866* @param remoteROMClass867* @return J9ROMClass *868*/869J9ROMClass *870dbgReadROMClass(J9ROMClass * remoteROMClass);871872873/**874* @brief875* @param remoteSRPAddress876* @return void *877*/878void *879dbgReadSRP(J9SRP * remoteSRPAddress);880881882/**883* @brief884* @param remoteAddress885* @return char*886*/887char*888dbgReadString(char* remoteAddress);889890891/**892* @brief893* @param remoteAddress894* @return U_16895*/896U_16897dbgReadU16(U_16 * remoteAddress);898899900/**901* @brief902* @param remoteAddress903* @return U_32904*/905U_32906dbgReadU32(U_32 * remoteAddress);907908909/**910* @brief911* @param remoteAddress912* @return UDATA913*/914UDATA915dbgReadUDATA(UDATA * remoteAddress);916917/**918* @brief919* @param remoteAddress920* @return U_64921*/922U_64923dbgReadU64(U_64 * remoteAddress);924925/**926* @brief927* @param remoteAddress928* @param size929* @return UDATA930*/931UDATA932dbgReadPrimitiveType(UDATA remoteAddress, UDATA size);933934/**935* @brief936* @param remoteThread937* @return J9VMThread *938*/939J9VMThread *940dbgReadVMThreadForGC(J9VMThread * remoteThread);941942943/**944* @brief945* @param bufPointer946* @return void*947*/948void *949dbgSetHandler(void* bufPointer);950951952/**953* @brief954* @param addr955* @param value956* @return void957*/958void959dbgSetLocalBlockRelocated(void * addr, UDATA value);960961962/**963* @brief964* @param vmPtr965* @return void966*/967void968dbgSetVM(void* vmPtr);969970971/**972* @brief973* @param void974* @return J9JavaVM*975*/976J9JavaVM*977dbgSniffForJavaVM(void);978979980/**981* @brief982* @param addr983* @return void *984*/985void *986dbgTargetToLocal(void * addr);987988989/**990* @brief991* @param addr992* @param size993* @return void *994*/995void *996dbgTargetToLocalWithSize(void * addr, UDATA size);997998999/**1000* @brief1001* @param message1002* @param arg_ptr1003* @return void1004*/1005void1006dbgVPrint (const char* message, va_list arg_ptr);10071008/**1009* @brief1010* @param *args1011* @return void1012*/1013void1014dbgext_j9x(const char *args);10151016/**1017* @brief1018* @param *args1019* @return void1020*/1021void1022dbgext_j9vtables(const char * args);10231024/**1025* @brief1026* @param *args1027* @return void1028*/1029void1030dbgext_allclasses(const char *args);10311032/**1033* @brief parse arguments for dumping structures1034* @param args[in] the arguments to parse1035* @param structAddress[out] the address of the struct to dump1036* @param needle[out] a wildcard needle (see wildcard.c)1037* @param needleLength[out] a wildcard needleLength (see wildcard.c)1038* @param matchFlag[out] a wildcard matchFlag (see wildcard.c)1039* @return 0 on success1040*/1041IDATA1042dbgParseArgForStructDump(const char * args, UDATA* structAddress, const char** needle, UDATA* needleLength, U_32 * matchFlag);10431044/**1045* @brief1046* @param args1047* @return void1048*/1049void1050dbgext_shrc(const char *args);10511052#if (defined(J9VM_OPT_SHARED_CLASSES))1053/**1054* @brief1055* @param remoteVM1056* @param length1057* @param firstEntry1058* @param reloc1059* @return void *1060*/1061void *1062dbgReadSharedCacheMetadata(J9JavaVM* remoteVM, UDATA* length, ShcItemHdr** firstEntry);1063#endif /* defined(J9VM_OPT_SHARED_CLASSES) */10641065/**1066* @brief1067* @param void1068* @return UDATA1069*/1070void1071dbgPrintJ9ClassRuntimeModule(UDATA addr);10721073#ifdef __cplusplus1074}1075#endif10761077#endif /* dbgext_internal_h */1078107910801081