Mercurial > hg > truffle
comparison src/os/linux/vm/os_linux.cpp @ 270:b7f01ad69d30
Merge
author | jmasa |
---|---|
date | Mon, 04 Aug 2008 12:11:36 -0700 |
parents | 850fdf70db2b d95b224e9f17 |
children | 1ee8caae33af |
comparison
equal
deleted
inserted
replaced
269:850fdf70db2b | 270:b7f01ad69d30 |
---|---|
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() { |