equal
deleted
inserted
replaced
91 /* Signal number used to suspend/resume a thread */ |
91 /* Signal number used to suspend/resume a thread */ |
92 |
92 |
93 /* do not use any signal number less than SIGSEGV, see 4355769 */ |
93 /* do not use any signal number less than SIGSEGV, see 4355769 */ |
94 static int SR_signum = SIGUSR2; |
94 static int SR_signum = SIGUSR2; |
95 sigset_t SR_sigset; |
95 sigset_t SR_sigset; |
|
96 |
|
97 /* Used to protect dlsym() calls */ |
|
98 static pthread_mutex_t dl_mutex; |
96 |
99 |
97 //////////////////////////////////////////////////////////////////////////////// |
100 //////////////////////////////////////////////////////////////////////////////// |
98 // utility functions |
101 // utility functions |
99 |
102 |
100 static int SR_initialize(); |
103 static int SR_initialize(); |
1491 |
1494 |
1492 const char* os::dll_file_extension() { return ".so"; } |
1495 const char* os::dll_file_extension() { return ".so"; } |
1493 |
1496 |
1494 const char* os::get_temp_directory() { return "/tmp/"; } |
1497 const char* os::get_temp_directory() { return "/tmp/"; } |
1495 |
1498 |
|
1499 void os::dll_build_name( |
|
1500 char* buffer, size_t buflen, const char* pname, const char* fname) { |
|
1501 // copied from libhpi |
|
1502 const size_t pnamelen = pname ? strlen(pname) : 0; |
|
1503 |
|
1504 /* Quietly truncate on buffer overflow. Should be an error. */ |
|
1505 if (pnamelen + strlen(fname) + 10 > (size_t) buflen) { |
|
1506 *buffer = '\0'; |
|
1507 return; |
|
1508 } |
|
1509 |
|
1510 if (pnamelen == 0) { |
|
1511 sprintf(buffer, "lib%s.so", fname); |
|
1512 } else { |
|
1513 sprintf(buffer, "%s/lib%s.so", pname, fname); |
|
1514 } |
|
1515 } |
|
1516 |
1496 const char* os::get_current_directory(char *buf, int buflen) { |
1517 const char* os::get_current_directory(char *buf, int buflen) { |
1497 return getcwd(buf, buflen); |
1518 return getcwd(buf, buflen); |
1498 } |
1519 } |
1499 |
1520 |
1500 // check if addr is inside libjvm[_g].so |
1521 // check if addr is inside libjvm[_g].so |
1740 } |
1761 } |
1741 |
1762 |
1742 return NULL; |
1763 return NULL; |
1743 } |
1764 } |
1744 |
1765 |
1745 |
1766 /* |
|
1767 * glibc-2.0 libdl is not MT safe. If you are building with any glibc, |
|
1768 * chances are you might want to run the generated bits against glibc-2.0 |
|
1769 * libdl.so, so always use locking for any version of glibc. |
|
1770 */ |
|
1771 void* os::dll_lookup(void* handle, const char* name) { |
|
1772 pthread_mutex_lock(&dl_mutex); |
|
1773 void* res = dlsym(handle, name); |
|
1774 pthread_mutex_unlock(&dl_mutex); |
|
1775 return res; |
|
1776 } |
1746 |
1777 |
1747 |
1778 |
1748 bool _print_ascii_file(const char* filename, outputStream* st) { |
1779 bool _print_ascii_file(const char* filename, outputStream* st) { |
1749 int fd = open(filename, O_RDONLY); |
1780 int fd = open(filename, O_RDONLY); |
1750 if (fd == -1) { |
1781 if (fd == -1) { |
3579 // main_thread points to the aboriginal thread |
3610 // main_thread points to the aboriginal thread |
3580 Linux::_main_thread = pthread_self(); |
3611 Linux::_main_thread = pthread_self(); |
3581 |
3612 |
3582 Linux::clock_init(); |
3613 Linux::clock_init(); |
3583 initial_time_count = os::elapsed_counter(); |
3614 initial_time_count = os::elapsed_counter(); |
|
3615 pthread_mutex_init(&dl_mutex, NULL); |
3584 } |
3616 } |
3585 |
3617 |
3586 // To install functions for atexit system call |
3618 // To install functions for atexit system call |
3587 extern "C" { |
3619 extern "C" { |
3588 static void perfMemory_exit_helper() { |
3620 static void perfMemory_exit_helper() { |