Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openj9
Path: blob/master/runtime/dbgext/dbgext_internal.h
5986 views
1
/*******************************************************************************
2
* Copyright (c) 1991, 2021 IBM Corp. and others
3
*
4
* This program and the accompanying materials are made available under
5
* the terms of the Eclipse Public License 2.0 which accompanies this
6
* distribution and is available at https://www.eclipse.org/legal/epl-2.0/
7
* or the Apache License, Version 2.0 which accompanies this distribution and
8
* is available at https://www.apache.org/licenses/LICENSE-2.0.
9
*
10
* This Source Code may also be made available under the following
11
* Secondary Licenses when the conditions for such availability set
12
* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU
13
* General Public License, version 2 with the GNU Classpath
14
* Exception [1] and GNU General Public License, version 2 with the
15
* OpenJDK Assembly Exception [2].
16
*
17
* [1] https://www.gnu.org/software/classpath/license.html
18
* [2] http://openjdk.java.net/legal/assembly-exception.html
19
*
20
* 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-exception
21
*******************************************************************************/
22
23
#ifndef dbgext_internal_h
24
#define dbgext_internal_h
25
26
/**
27
* @file dbgext_internal.h
28
* @brief Internal prototypes used within the DBGEXT module.
29
*
30
* This file contains implementation-private function prototypes and
31
* type definitions for the DBGEXT module.
32
*
33
*/
34
35
#include "j9.h"
36
#include "j9comp.h"
37
#include "dbgext_api.h"
38
#include "jni.h"
39
#if defined(J9VM_OPT_SHARED_CLASSES)
40
#include "shcdatatypes.h"
41
#endif
42
43
#ifdef __cplusplus
44
extern "C" {
45
#endif
46
47
48
/* ---------------- dbgpool.c ---------------- */
49
50
/**
51
* @typedef
52
* @struct
53
*/
54
typedef struct J9PoolWalkData {
55
UDATA counter;
56
J9Pool *head;
57
J9PoolPuddle *puddle;
58
} J9PoolWalkData;
59
60
/**
61
* @brief
62
* @param *aPool
63
* @param (*aFunction)(void*, J9PoolWalkData*)
64
* @param *userData
65
* @return void
66
*/
67
void
68
walkAndCall(J9Pool *aPool, void (*aFunction)(void*,J9PoolWalkData*), J9PoolWalkData *userData);
69
70
71
/**
72
* @brief
73
* @param *args
74
* @return void
75
*/
76
void
77
dbgext_walkj9pool(const char *args);
78
79
80
/**
81
* @brief
82
* @param addr
83
* @return J9Pool *
84
*/
85
J9Pool *
86
dbgMapPool(UDATA addr);
87
88
89
/**
90
* @brief
91
* @param *pool
92
* @return void
93
*/
94
void
95
dbgUnmapPool(J9Pool *pool);
96
97
98
/**
99
* @brief
100
* @param *addr
101
* @param *data
102
* @return void
103
*/
104
void
105
defaultJ9PoolWalkPFunc(void *addr, J9PoolWalkData *data);
106
107
108
/**
109
* @brief
110
* @param addr
111
* @param (*pFunc)(void*
112
* @param J9PoolWalkData*)
113
* @param J9PoolWalkData*data
114
* @return void
115
*/
116
void
117
walkJ9Pool(UDATA addr, void (*pFunc)(void*,J9PoolWalkData*), J9PoolWalkData*data);
118
119
120
/* ---------------- j9dbgext.c ---------------- */
121
122
/**
123
* @brief
124
* @param stringObject
125
* @param athread
126
* @return char *
127
*/
128
char *
129
copyStringIntoUTF8(J9VMThread* athread, j9object_t stringObject);
130
131
132
/**
133
* @brief
134
* @param state
135
* @param vm
136
* @param flags
137
* @return J9ClassLoader*
138
*/
139
J9ClassLoader*
140
dbgAllClassLoadersStartDo(J9ClassLoaderWalkState* state, J9JavaVM* vm, UDATA flags);
141
142
143
/**
144
* @brief
145
* @param state
146
* @return J9ClassLoader*
147
*/
148
J9ClassLoader*
149
dbgAllClassLoadersNextDo(J9ClassLoaderWalkState* state);
150
151
152
/**
153
* @brief
154
* @param state
155
* @return J9Class*
156
*/
157
J9Class *
158
dbgAllClassesNextDo(J9ClassWalkState* state);
159
160
161
/**
162
* @brief
163
* @param state
164
* @param vmPtr
165
* @param classLoader
166
* @return J9Class*
167
*/
168
J9Class *
169
dbgAllClassesStartDo(J9ClassWalkState* state, J9JavaVM* vmPtr, J9ClassLoader* classLoader);
170
171
172
/**
173
* @brief
174
* @param state
175
* @return J9ROMClass*
176
*/
177
J9ROMClass*
178
dbgAllROMClassesNextDo(J9ClassWalkState* state);
179
180
181
/**
182
* @brief
183
* @param state
184
* @param vmPtr
185
* @param classLoader
186
* @return J9ROMClass*
187
*/
188
J9ROMClass*
189
dbgAllROMClassesStartDo(J9ClassWalkState* state, J9JavaVM* vmPtr, J9ClassLoader* classLoader);
190
191
192
/**
193
* @brief
194
* @param romMethod
195
* @return J9ROMMethod*
196
*/
197
J9ROMMethod*
198
dbgNextROMMethod(J9ROMMethod *romMethod);
199
200
201
#if (defined(J9VM_INTERP_NATIVE_SUPPORT))
202
/**
203
* @brief
204
* @param remoteTree
205
* @param searchValue
206
* @return struct J9JITHashTable *
207
*/
208
struct J9JITHashTable *
209
dbgAvlSearch(J9AVLTree * remoteTree, UDATA searchValue);
210
#endif /* J9VM_INTERP_NATIVE_SUPPORT */
211
212
213
/**
214
* @brief
215
* @param *remoteList
216
* @return void
217
*/
218
void
219
dbgDumpSegmentList(void *remoteList);
220
221
222
/**
223
* @brief
224
* @param format
225
* @param ...
226
* @return void
227
*/
228
void
229
dbgError(const char* format, ...);
230
231
232
/**
233
* @brief
234
* @param *args
235
* @return void
236
*/
237
void
238
dbgext_bytecodes(const char *args);
239
240
241
/**
242
* @brief
243
* @param *args
244
* @return void
245
*/
246
void
247
dbgext_dumpallclassloaders(const char *args);
248
249
250
/**
251
* @brief
252
* @param *args
253
* @return void
254
*/
255
void
256
dbgext_dumpallsegments(const char *args);
257
258
/**
259
* @brief
260
* @param *args
261
* @return void
262
*/
263
void
264
dbgext_dumpjitmethodstore(const char *args);
265
266
267
/**
268
* @brief
269
* @param *args
270
* @return void
271
*/
272
void
273
dbgext_dumpromclass(const char *args);
274
275
276
/**
277
* @brief
278
* @param *args
279
* @return void
280
*/
281
void
282
dbgext_dumpallromclasslinear(const char *args);
283
284
285
/**
286
* @brief
287
* @param *args
288
* @return void
289
*/
290
void
291
dbgext_dumpromclasslinear(const char *args);
292
293
294
/**
295
* @brief
296
* @param *args
297
* @return void
298
*/
299
void
300
dbgext_queryromclass(const char *args);
301
302
303
/**
304
* @brief
305
* @param *args
306
* @return void
307
*/
308
void
309
dbgext_dumpsegmentsinlist(const char *args);
310
311
312
/**
313
* @brief
314
* @param *args
315
* @return void
316
*/
317
void dbgext_findmethodfrompc(const char *args);
318
319
320
/**
321
* @brief
322
* @param *args
323
* @return void
324
*/
325
void
326
dbgext_findstackvalue(const char *args);
327
328
329
/**
330
* @brief
331
* @param *args
332
* @return void
333
*/
334
void
335
dbgext_findvm(const char *args);
336
337
338
/**
339
* @brief
340
* @param *args
341
* @return void
342
*/
343
void
344
dbgext_j9help(const char *args);
345
346
347
/**
348
* @brief
349
* @param *args
350
* @return void
351
*/
352
void
353
dbgext_j9reg(const char *args);
354
355
356
/**
357
* @brief
358
* @param *args
359
* @return void
360
*/
361
void
362
dbgext_jextract(const char *args);
363
364
365
/**
366
* @brief
367
* @param *args
368
* @return void
369
*/
370
void
371
dbgext_jitmetadatafrompc(const char *args);
372
373
374
/**
375
* @brief
376
* @param *args
377
* @return void
378
*/
379
void
380
dbgext_jitstack(const char *args);
381
382
383
/**
384
* @brief
385
* @param *args
386
* @return void
387
*/
388
void
389
dbgext_jitstackslots(const char *args);
390
391
392
/**
393
* @brief
394
* @param *args
395
* @return void
396
*/
397
void
398
dbgext_localmap(const char *args);
399
400
401
/**
402
* @brief
403
* @param *args
404
* @return void
405
*/
406
void
407
dbgext_setvm(const char *args);
408
409
410
/**
411
* @brief
412
* @param *args
413
* @return void
414
*/
415
void
416
dbgext_stack(const char *args);
417
418
419
/**
420
* @brief
421
* @param *args
422
* @return void
423
*/
424
void
425
dbgext_stackmap(const char *args);
426
427
428
/**
429
* @brief
430
* @param *args
431
* @return void
432
*/
433
void
434
dbgext_stackslots(const char *args);
435
436
437
/**
438
* @brief
439
* @param *args
440
* @return void
441
*/
442
void
443
dbgext_slots(const char *args);
444
445
/**
446
* @brief
447
* @param *args
448
* @return void
449
*/
450
void
451
dbgext_module(const char *args);
452
453
454
/**
455
* @brief
456
* @param *args
457
* @return void
458
*/
459
void
460
dbgext_threads(const char *args);
461
462
/**
463
* @brief
464
* @param *args
465
* @return void
466
*/
467
void
468
dbgext_findcallsite(const char *args);
469
470
/**
471
* @brief
472
* @param *args
473
* @return void
474
*/
475
void
476
dbgext_findfreedcallsite(const char *args);
477
478
/**
479
* @brief
480
* @param *args
481
* @return void
482
*/
483
void
484
dbgext_findallcallsites(const char *args);
485
486
/**
487
* @brief
488
* @param *args
489
* @return void
490
*/
491
void
492
dbgext_findfreedcallsites(const char *args);
493
494
/**
495
* @brief
496
* @param *args
497
* @return void
498
*/
499
void
500
dbgext_printallcallsites(const char *args);
501
502
503
/**
504
* @brief
505
* @param *args
506
* @return void
507
*/
508
void
509
dbgext_printfreedcallsites(const char *args);
510
511
512
/**
513
* @brief
514
* @param *args
515
* @return void
516
*/
517
void
518
dbgext_findheader(const char *args);
519
520
/**
521
* @brief
522
* @param *args
523
* @return void
524
*/
525
void
526
dbgext_findpattern(const char *args);
527
528
/**
529
* @brief
530
* @param *args
531
* @return void
532
*/
533
534
void
535
dbgext_fj9object(const char *args);
536
537
/**
538
* @brief
539
* @param *args
540
* @return void
541
*/
542
void
543
dbgext_j9objecttofj9object(const char *args);
544
545
/**
546
* @brief
547
* @param *args
548
* @return void
549
*/
550
void
551
dbgext_fj9objecttoj9object(const char *args);
552
553
#if (defined(J9VM_INTERP_NATIVE_SUPPORT))
554
/**
555
* @brief
556
* @param *remoteTree
557
* @param searchValue
558
* @return struct J9JITExceptionTable *
559
*/
560
struct J9JITExceptionTable *
561
dbgFindJITMetaData(J9AVLTree *remoteTree, UDATA searchValue);
562
#endif /* J9VM_INTERP_NATIVE_SUPPORT */
563
564
565
/**
566
* @brief
567
* @param pattern
568
* @param patternLength
569
* @param patternAlignment
570
* @param startSearchFrom
571
* @param bytesToSearch
572
* @param bytesSearched
573
* @return void*
574
*/
575
void*
576
dbgFindPatternInRange(U_8* pattern, UDATA patternLength, UDATA patternAlignment, U_8* startSearchFrom, UDATA bytesToSearch, UDATA* bytesSearched);
577
578
579
/**
580
* @brief
581
* @param addr
582
* @return void
583
*/
584
void
585
dbgFree(void * addr);
586
587
588
/**
589
* @brief
590
* @param void
591
* @return void
592
*/
593
void
594
dbgFreeAll(void);
595
596
597
/**
598
* @brief
599
* @param *clazzAddr
600
* @return char *
601
*/
602
char *
603
dbgGetClassNameFromROMClass(void *clazzAddr);
604
605
606
/**
607
* @brief
608
* @param *clazzAddr
609
* @return char *
610
*/
611
char *
612
dbgGetClassNameFromClass(void *clazzAddr);
613
614
615
/**
616
* @brief
617
* @param *addr
618
* @return char *
619
*/
620
char *
621
dbgGetClassNameFromObject(void *addr);
622
623
624
/**
625
* @brief
626
* @param addr
627
* @return UDATA
628
*/
629
UDATA
630
dbgGetLocalBlockRelocated(void * addr);
631
632
633
/**
634
* @brief
635
* @param vmPtr
636
* @param pc
637
* @return J9Method *
638
*/
639
J9Method *
640
dbgGetMethodFromPC(void* vmPtr, const U_8* pc);
641
642
643
/**
644
* @brief
645
* @param *currentThread
646
* @param *pc
647
* @param *constantPool
648
* @return J9Method *
649
*/
650
J9Method *
651
dbgGetMethodFromPCAndConstantPool(J9VMThread *currentThread, const U_8 *pc, const J9ConstantPool *constantPool);
652
653
654
/**
655
* @brief
656
* @param *ramMethodAddr
657
* @return char *
658
*/
659
char *
660
dbgGetNameFromRAMMethod(void *ramMethodAddr);
661
662
663
/**
664
* @brief
665
* @param *remoteROMMethod
666
* @param *ramClassName
667
* @return char *
668
*/
669
char *
670
dbgGetNameFromROMMethod(J9ROMMethod *remoteROMMethod, char *ramClassName);
671
672
673
/**
674
* @brief
675
* @param void
676
* @return J9PortLibrary *
677
*/
678
J9PortLibrary *
679
dbgGetPortLibrary(void);
680
681
682
/**
683
* @brief
684
* @param *ptr
685
* @return char *
686
*/
687
char *
688
dbgGetStringFromUTF(void *ptr);
689
690
691
/**
692
* @brief
693
* @param void
694
* @return void*
695
*/
696
void* dbgGetThreadLibrary(void);
697
698
699
/**
700
* @brief
701
* @param addr
702
* @return void *
703
*/
704
void *
705
dbgLocalToTarget(void * addr);
706
707
j9object_t
708
mapFJ9objectToJ9object(fj9object_t fieldObject);
709
710
/**
711
* @brief
712
* @param size
713
* @param *originalAddress
714
* @return void *
715
*/
716
void *
717
dbgMalloc(UDATA size, void *originalAddress);
718
719
720
/**
721
* @brief
722
* @param size
723
* @param remoteAddress
724
* @return void *
725
*/
726
void *
727
dbgMallocAndRead(UDATA size, void * remoteAddress);
728
729
730
/**
731
* @brief
732
* @param address
733
* @return UDATA
734
*/
735
UDATA
736
dbgObjectSizeInBytes(j9object_t address);
737
738
739
/**
740
* @brief
741
* @param *address
742
* @param **cachePtr
743
* @return UDATA
744
*/
745
UDATA
746
dbgObjectSizeInBytesCached(j9object_t address, J9HashTable **cachePtr);
747
748
749
/**
750
* @brief
751
* @param originalArgs
752
* @param argValues
753
* @param maxArgs
754
* @return UDATA
755
*/
756
UDATA
757
dbgParseArgs(const char * originalArgs, UDATA * argValues, UDATA maxArgs);
758
759
760
/**
761
* @brief
762
* @param localThread
763
* @return UDATA
764
*/
765
UDATA
766
dbgPrepareThreadForStackWalk(J9VMThread * localThread);
767
768
769
/**
770
* @brief
771
* @param message
772
* @param ...
773
* @return void
774
*/
775
void
776
dbgPrint (const char* message, ...);
777
778
779
/**
780
* @brief
781
* @param remoteAddress
782
* @return U_8
783
*/
784
U_8
785
dbgReadByte(U_8 * remoteAddress);
786
787
788
/**
789
* @brief
790
* @param remoteClass
791
* @return J9Class *
792
*/
793
J9Class *
794
dbgReadClass(J9Class * remoteClass);
795
796
797
/**
798
* @brief
799
* @param remoteObject
800
* @return J9Object *
801
*/
802
J9Object *
803
dbgReadObject(J9Object * remoteObject);
804
805
806
/**
807
* @brief
808
* @param remoteCP
809
* @return J9ConstantPool *
810
*/
811
J9ConstantPool *
812
dbgReadCP(J9ConstantPool * remoteCP);
813
814
815
/**
816
* @brief
817
* @param remoteVM
818
* @return J9JavaVM *
819
*/
820
J9JavaVM *
821
dbgReadJavaVM(J9JavaVM * remoteVM);
822
823
824
struct J9JITHashTable;
825
#if (defined(J9VM_INTERP_NATIVE_SUPPORT))
826
/**
827
* @brief
828
* @param remoteTable
829
* @return struct J9JITHashTable *
830
*/
831
struct J9JITHashTable *
832
dbgReadJITHashTable(struct J9JITHashTable* remoteTable);
833
#endif /* J9VM_INTERP_NATIVE_SUPPORT */
834
835
836
struct J9JITExceptionTable;
837
#if (defined(J9VM_INTERP_NATIVE_SUPPORT))
838
/**
839
* @brief
840
* @param *remoteMetaData
841
* @return struct J9JITExceptionTable *
842
*/
843
struct J9JITExceptionTable *
844
dbgReadJITMetaData(struct J9JITExceptionTable *remoteMetaData);
845
#endif /* J9VM_INTERP_NATIVE_SUPPORT */
846
847
848
/**
849
* @brief
850
* @param remoteMethod
851
* @return J9Method *
852
*/
853
J9Method * dbgReadMethod(J9Method * remoteMethod);
854
855
856
/**
857
* @brief
858
* @param remotePool
859
* @return J9Pool *
860
*/
861
J9Pool *
862
dbgReadPool(J9Pool* remotePool);
863
864
865
/**
866
* @brief
867
* @param remoteROMClass
868
* @return J9ROMClass *
869
*/
870
J9ROMClass *
871
dbgReadROMClass(J9ROMClass * remoteROMClass);
872
873
874
/**
875
* @brief
876
* @param remoteSRPAddress
877
* @return void *
878
*/
879
void *
880
dbgReadSRP(J9SRP * remoteSRPAddress);
881
882
883
/**
884
* @brief
885
* @param remoteAddress
886
* @return char*
887
*/
888
char*
889
dbgReadString(char* remoteAddress);
890
891
892
/**
893
* @brief
894
* @param remoteAddress
895
* @return U_16
896
*/
897
U_16
898
dbgReadU16(U_16 * remoteAddress);
899
900
901
/**
902
* @brief
903
* @param remoteAddress
904
* @return U_32
905
*/
906
U_32
907
dbgReadU32(U_32 * remoteAddress);
908
909
910
/**
911
* @brief
912
* @param remoteAddress
913
* @return UDATA
914
*/
915
UDATA
916
dbgReadUDATA(UDATA * remoteAddress);
917
918
/**
919
* @brief
920
* @param remoteAddress
921
* @return U_64
922
*/
923
U_64
924
dbgReadU64(U_64 * remoteAddress);
925
926
/**
927
* @brief
928
* @param remoteAddress
929
* @param size
930
* @return UDATA
931
*/
932
UDATA
933
dbgReadPrimitiveType(UDATA remoteAddress, UDATA size);
934
935
/**
936
* @brief
937
* @param remoteThread
938
* @return J9VMThread *
939
*/
940
J9VMThread *
941
dbgReadVMThreadForGC(J9VMThread * remoteThread);
942
943
944
/**
945
* @brief
946
* @param bufPointer
947
* @return void*
948
*/
949
void *
950
dbgSetHandler(void* bufPointer);
951
952
953
/**
954
* @brief
955
* @param addr
956
* @param value
957
* @return void
958
*/
959
void
960
dbgSetLocalBlockRelocated(void * addr, UDATA value);
961
962
963
/**
964
* @brief
965
* @param vmPtr
966
* @return void
967
*/
968
void
969
dbgSetVM(void* vmPtr);
970
971
972
/**
973
* @brief
974
* @param void
975
* @return J9JavaVM*
976
*/
977
J9JavaVM*
978
dbgSniffForJavaVM(void);
979
980
981
/**
982
* @brief
983
* @param addr
984
* @return void *
985
*/
986
void *
987
dbgTargetToLocal(void * addr);
988
989
990
/**
991
* @brief
992
* @param addr
993
* @param size
994
* @return void *
995
*/
996
void *
997
dbgTargetToLocalWithSize(void * addr, UDATA size);
998
999
1000
/**
1001
* @brief
1002
* @param message
1003
* @param arg_ptr
1004
* @return void
1005
*/
1006
void
1007
dbgVPrint (const char* message, va_list arg_ptr);
1008
1009
/**
1010
* @brief
1011
* @param *args
1012
* @return void
1013
*/
1014
void
1015
dbgext_j9x(const char *args);
1016
1017
/**
1018
* @brief
1019
* @param *args
1020
* @return void
1021
*/
1022
void
1023
dbgext_j9vtables(const char * args);
1024
1025
/**
1026
* @brief
1027
* @param *args
1028
* @return void
1029
*/
1030
void
1031
dbgext_allclasses(const char *args);
1032
1033
/**
1034
* @brief parse arguments for dumping structures
1035
* @param args[in] the arguments to parse
1036
* @param structAddress[out] the address of the struct to dump
1037
* @param needle[out] a wildcard needle (see wildcard.c)
1038
* @param needleLength[out] a wildcard needleLength (see wildcard.c)
1039
* @param matchFlag[out] a wildcard matchFlag (see wildcard.c)
1040
* @return 0 on success
1041
*/
1042
IDATA
1043
dbgParseArgForStructDump(const char * args, UDATA* structAddress, const char** needle, UDATA* needleLength, U_32 * matchFlag);
1044
1045
/**
1046
* @brief
1047
* @param args
1048
* @return void
1049
*/
1050
void
1051
dbgext_shrc(const char *args);
1052
1053
#if (defined(J9VM_OPT_SHARED_CLASSES))
1054
/**
1055
* @brief
1056
* @param remoteVM
1057
* @param length
1058
* @param firstEntry
1059
* @param reloc
1060
* @return void *
1061
*/
1062
void *
1063
dbgReadSharedCacheMetadata(J9JavaVM* remoteVM, UDATA* length, ShcItemHdr** firstEntry);
1064
#endif /* defined(J9VM_OPT_SHARED_CLASSES) */
1065
1066
/**
1067
* @brief
1068
* @param void
1069
* @return UDATA
1070
*/
1071
void
1072
dbgPrintJ9ClassRuntimeModule(UDATA addr);
1073
1074
#ifdef __cplusplus
1075
}
1076
#endif
1077
1078
#endif /* dbgext_internal_h */
1079
1080
1081