提交 0125ba91 编写于 作者: X xlu

6681796: hotspot build failure on gcc 4.2.x (ubuntu 8.04) w/ openjdk 6

Summary: Fixed the cast from char* to const char* and tried to use const char* as much as possible
Reviewed-by: never, kamg
Contributed-by: xiaobin.lu@sun.com
上级 ea870e70
...@@ -132,7 +132,7 @@ JVM_END ...@@ -132,7 +132,7 @@ JVM_END
*/ */
struct siglabel { struct siglabel {
char *name; const char *name;
int number; int number;
}; };
......
...@@ -75,8 +75,8 @@ int os::Linux::_page_size = -1; ...@@ -75,8 +75,8 @@ int os::Linux::_page_size = -1;
bool os::Linux::_is_floating_stack = false; bool os::Linux::_is_floating_stack = false;
bool os::Linux::_is_NPTL = false; bool os::Linux::_is_NPTL = false;
bool os::Linux::_supports_fast_thread_cpu_time = false; bool os::Linux::_supports_fast_thread_cpu_time = false;
char * os::Linux::_glibc_version = NULL; const char * os::Linux::_glibc_version = NULL;
char * os::Linux::_libpthread_version = NULL; const char * os::Linux::_libpthread_version = NULL;
static jlong initial_time_count=0; static jlong initial_time_count=0;
...@@ -213,9 +213,9 @@ pid_t os::Linux::gettid() { ...@@ -213,9 +213,9 @@ pid_t os::Linux::gettid() {
// the system call returns 1. This causes the VM to act as if it is // the system call returns 1. This causes the VM to act as if it is
// a single processor and elide locking (see is_MP() call). // a single processor and elide locking (see is_MP() call).
static bool unsafe_chroot_detected = false; static bool unsafe_chroot_detected = false;
static char *unstable_chroot_error = "/proc file system not found.\n" static const char *unstable_chroot_error = "/proc file system not found.\n"
"Java may be unstable running multithreaded in a chroot " "Java may be unstable running multithreaded in a chroot "
"environment on Linux when /proc filesystem is not mounted."; "environment on Linux when /proc filesystem is not mounted.";
void os::Linux::initialize_system_info() { void os::Linux::initialize_system_info() {
_processor_count = sysconf(_SC_NPROCESSORS_CONF); _processor_count = sysconf(_SC_NPROCESSORS_CONF);
...@@ -544,26 +544,23 @@ void os::Linux::libpthread_init() { ...@@ -544,26 +544,23 @@ void os::Linux::libpthread_init() {
if (n > 0) { if (n > 0) {
char *str = (char *)malloc(n); char *str = (char *)malloc(n);
confstr(_CS_GNU_LIBPTHREAD_VERSION, str, n); confstr(_CS_GNU_LIBPTHREAD_VERSION, str, n);
// Vanilla RH-9 (glibc 2.3.2) has a bug that confstr() always tells // Vanilla RH-9 (glibc 2.3.2) has a bug that confstr() always tells
// us "NPTL-0.29" even we are running with LinuxThreads. Check if this // us "NPTL-0.29" even we are running with LinuxThreads. Check if this
// is the case: // is the case. LinuxThreads has a hard limit on max number of threads.
// So sysconf(_SC_THREAD_THREADS_MAX) will return a positive value.
// On the other hand, NPTL does not have such a limit, sysconf()
// will return -1 and errno is not changed. Check if it is really NPTL.
if (strcmp(os::Linux::glibc_version(), "glibc 2.3.2") == 0 && if (strcmp(os::Linux::glibc_version(), "glibc 2.3.2") == 0 &&
strstr(str, "NPTL")) { strstr(str, "NPTL") &&
// LinuxThreads has a hard limit on max number of threads. So sysconf(_SC_THREAD_THREADS_MAX) > 0) {
// sysconf(_SC_THREAD_THREADS_MAX) will return a positive value. free(str);
// On the other hand, NPTL does not have such a limit, sysconf() os::Linux::set_libpthread_version("linuxthreads");
// will return -1 and errno is not changed. Check if it is really } else {
// NPTL: os::Linux::set_libpthread_version(str);
if (sysconf(_SC_THREAD_THREADS_MAX) > 0) {
free(str);
str = "linuxthreads";
}
} }
os::Linux::set_libpthread_version(str);
} else { } else {
// glibc before 2.3.2 only has LinuxThreads. // glibc before 2.3.2 only has LinuxThreads.
os::Linux::set_libpthread_version("linuxthreads"); os::Linux::set_libpthread_version("linuxthreads");
} }
if (strstr(libpthread_version(), "NPTL")) { if (strstr(libpthread_version(), "NPTL")) {
...@@ -4632,11 +4629,7 @@ extern char** environ; ...@@ -4632,11 +4629,7 @@ extern char** environ;
// Unlike system(), this function can be called from signal handler. It // Unlike system(), this function can be called from signal handler. It
// doesn't block SIGINT et al. // doesn't block SIGINT et al.
int os::fork_and_exec(char* cmd) { int os::fork_and_exec(char* cmd) {
char * argv[4]; const char * argv[4] = {"sh", "-c", cmd, NULL};
argv[0] = "sh";
argv[1] = "-c";
argv[2] = cmd;
argv[3] = NULL;
// fork() in LinuxThreads/NPTL is not async-safe. It needs to run // fork() in LinuxThreads/NPTL is not async-safe. It needs to run
// pthread_atfork handlers and reset pthread library. All we need is a // pthread_atfork handlers and reset pthread library. All we need is a
...@@ -4661,7 +4654,7 @@ int os::fork_and_exec(char* cmd) { ...@@ -4661,7 +4654,7 @@ int os::fork_and_exec(char* cmd) {
// IA64 should use normal execve() from glibc to match the glibc fork() // IA64 should use normal execve() from glibc to match the glibc fork()
// above. // above.
NOT_IA64(syscall(__NR_execve, "/bin/sh", argv, environ);) NOT_IA64(syscall(__NR_execve, "/bin/sh", argv, environ);)
IA64_ONLY(execve("/bin/sh", argv, environ);) IA64_ONLY(execve("/bin/sh", (char* const*)argv, environ);)
// execve failed // execve failed
_exit(-1); _exit(-1);
......
...@@ -52,8 +52,8 @@ class Linux { ...@@ -52,8 +52,8 @@ class Linux {
static address _initial_thread_stack_bottom; static address _initial_thread_stack_bottom;
static uintptr_t _initial_thread_stack_size; static uintptr_t _initial_thread_stack_size;
static char *_glibc_version; static const char *_glibc_version;
static char *_libpthread_version; static const char *_libpthread_version;
static bool _is_floating_stack; static bool _is_floating_stack;
static bool _is_NPTL; static bool _is_NPTL;
...@@ -72,8 +72,8 @@ class Linux { ...@@ -72,8 +72,8 @@ class Linux {
static julong physical_memory() { return _physical_memory; } static julong physical_memory() { return _physical_memory; }
static void initialize_system_info(); static void initialize_system_info();
static void set_glibc_version(char *s) { _glibc_version = s; } static void set_glibc_version(const char *s) { _glibc_version = s; }
static void set_libpthread_version(char *s) { _libpthread_version = s; } static void set_libpthread_version(const char *s) { _libpthread_version = s; }
static bool supports_variable_stack_size(); static bool supports_variable_stack_size();
...@@ -134,8 +134,8 @@ class Linux { ...@@ -134,8 +134,8 @@ class Linux {
static bool chained_handler(int sig, siginfo_t* siginfo, void* context); static bool chained_handler(int sig, siginfo_t* siginfo, void* context);
// GNU libc and libpthread version strings // GNU libc and libpthread version strings
static char *glibc_version() { return _glibc_version; } static const char *glibc_version() { return _glibc_version; }
static char *libpthread_version() { return _libpthread_version; } static const char *libpthread_version() { return _libpthread_version; }
// NPTL or LinuxThreads? // NPTL or LinuxThreads?
static bool is_LinuxThreads() { return !_is_NPTL; } static bool is_LinuxThreads() { return !_is_NPTL; }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册