diff --git a/agent/src/os/solaris/proc/salibproc.h b/agent/src/os/solaris/proc/salibproc.h index 1e6d9cfbd6ba2ea6b0157258a694304319187a53..ddc68d94a43361d6c5a488d2122ca60df022b136 100644 --- a/agent/src/os/solaris/proc/salibproc.h +++ b/agent/src/os/solaris/proc/salibproc.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,6 +46,17 @@ extern "C" { #endif +/* extended symbol table information */ +typedef struct { + const char *prs_object; /* object name */ + const char *prs_name; /* symbol name */ + Lmid_t prs_lmid; /* link map id */ + uint_t prs_id; /* symbol id */ + uint_t prs_table; /* symbol table id */ +} prsyminfo_t; + +typedef struct ps_prochandle ps_prochandle_t; + /* * 'object_name' is the name of a load object obtained from an * iteration over the process's address space mappings (Pmapping_iter), @@ -53,8 +64,10 @@ extern "C" { * or else it is one of the special PR_OBJ_* values above. */ -extern int Plookup_by_addr(struct ps_prochandle *, - uintptr_t, char *, size_t, GElf_Sym *); +extern int Plookup_by_addr(ps_prochandle_t *, uintptr_t, char *, + size_t, GElf_Sym *, prsyminfo_t *); +extern ps_prochandle_t *proc_arg_grab(const char *, int, int, + int *, const char **); typedef int proc_map_f(void *, const prmap_t *, const char *); extern int Pobject_iter(struct ps_prochandle *, proc_map_f *, void *); @@ -88,7 +101,6 @@ extern int Pobject_iter(struct ps_prochandle *, proc_map_f *, void *); #define G_ELF 13 /* Libelf error, elf_errno() is meaningful */ #define G_NOTE 14 /* Required PT_NOTE Phdr not present in core */ -extern struct ps_prochandle *proc_arg_grab(const char *, int, int, int *); extern const pstatus_t *Pstatus(struct ps_prochandle *); /* Flags accepted by Prelease (partial) */ diff --git a/agent/src/os/solaris/proc/saproc.cpp b/agent/src/os/solaris/proc/saproc.cpp index 3f0e6b25814fec8af30783b559239218e2995407..42a13c5d4b8e03e13ddc4d975ce4686c3aea3229 100644 --- a/agent/src/os/solaris/proc/saproc.cpp +++ b/agent/src/os/solaris/proc/saproc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -755,7 +755,8 @@ static void attach_internal(JNIEnv* env, jobject this_obj, jstring cmdLine, jboo #endif // connect to process/core - struct ps_prochandle* ph = proc_arg_grab(cmdLine_cstr, (isProcess? PR_ARG_PIDS : PR_ARG_CORES), PGRAB_FORCE, &gcode); + ps_prochandle_t* ph = proc_arg_grab(cmdLine_cstr, (isProcess? PR_ARG_PIDS : PR_ARG_CORES), PGRAB_FORCE, &gcode, NULL); + env->ReleaseStringUTFChars(cmdLine, cmdLine_cstr); if (! ph) { if (gcode > 0 && gcode < sizeof(proc_arg_grab_errmsgs)/sizeof(const char*)) { @@ -1233,7 +1234,8 @@ JNIEXPORT jobject JNICALL Java_sun_jvm_hotspot_debugger_proc_ProcDebuggerLocal_l char nameBuf[SYMBOL_BUF_SIZE + 1]; GElf_Sym sym; int res = Plookup_by_addr((struct ps_prochandle*) p_ps_prochandle, (uintptr_t) address, - nameBuf, sizeof(nameBuf), &sym); + nameBuf, sizeof(nameBuf), &sym, NULL); + if (res != 0) { // failed return 0; }