提交 fab41a85 编写于 作者: D dholmes

8151322: Implement os::set_native_thread_name() on Solaris

Reviewed-by: sla, kbarrett, gziemski
上级 3087773f
......@@ -160,6 +160,7 @@ address os::Solaris::handler_end; // end pc of thr_sighndlrinfo
address os::Solaris::_main_stack_base = NULL; // 4352906 workaround
os::Solaris::pthread_setname_np_func_t os::Solaris::_pthread_setname_np = NULL;
// "default" initializers for missing libc APIs
extern "C" {
......@@ -519,8 +520,15 @@ static bool assign_distribution(processorid_t* id_array,
}
void os::set_native_thread_name(const char *name) {
// Not yet implemented.
return;
if (Solaris::_pthread_setname_np != NULL) {
// Only the first 31 bytes of 'name' are processed by pthread_setname_np
// but we explicitly copy into a size-limited buffer to avoid any
// possible overflow.
char buf[32];
snprintf(buf, sizeof(buf), "%s", name);
buf[sizeof(buf) - 1] = '\0';
Solaris::_pthread_setname_np(pthread_self(), buf);
}
}
bool os::distribute_processes(uint length, uint* distribution) {
......@@ -4921,6 +4929,13 @@ void os::init(void) {
// the minimum of what the OS supports (thr_min_stack()), and
// enough to allow the thread to get to user bytecode execution.
Solaris::min_stack_allowed = MAX2(thr_min_stack(), Solaris::min_stack_allowed);
// retrieve entry point for pthread_setname_np
void * handle = dlopen("libc.so.1", RTLD_LAZY);
if (handle != NULL) {
Solaris::_pthread_setname_np =
(Solaris::pthread_setname_np_func_t)dlsym(handle, "pthread_setname_np");
}
// If the pagesize of the VM is greater than 8K determine the appropriate
// number of initial guard pages. The user can change this with the
// command line arguments, if needed.
......
/*
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2016, 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
......@@ -132,6 +132,9 @@ class Solaris {
static void set_SIGinterrupt(int newsig) { _SIGinterrupt = newsig; }
static void set_SIGasync(int newsig) { _SIGasync = newsig; }
typedef int (*pthread_setname_np_func_t)(pthread_t, const char*);
static pthread_setname_np_func_t _pthread_setname_np;
public:
// Large Page Support--ISM.
static bool largepage_range(char* addr, size_t size);
......
......@@ -332,7 +332,7 @@ inline size_t pointer_delta(const MetaWord* left, const MetaWord* right) {
// so far from the middle of the road that it is likely to be problematic in
// many C++ compilers.
//
#define CAST_TO_FN_PTR(func_type, value) ((func_type)(castable_address(value)))
#define CAST_TO_FN_PTR(func_type, value) (reinterpret_cast<func_type>(value))
#define CAST_FROM_FN_PTR(new_type, func_ptr) ((new_type)((address_word)(func_ptr)))
// Unsigned byte types for os and stream.hpp
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册