72 break; 73 } 74 } 75 VMError::report_coredump_status(buffer, success); 76 } 77 78 int os::get_native_stack(address* stack, int frames, int toSkip) { 79 #ifdef _NMT_NOINLINE_ 80 toSkip++; 81 #endif 82 83 int frame_idx = 0; 84 int num_of_frames; // number of frames captured 85 frame fr = os::current_frame(); 86 while (fr.pc() && frame_idx < frames) { 87 if (toSkip > 0) { 88 toSkip --; 89 } else { 90 stack[frame_idx ++] = fr.pc(); 91 } 92 if (fr.fp() == NULL || os::is_first_C_frame(&fr) 93 ||fr.sender_pc() == NULL || fr.cb() != NULL) break; 94 95 if (fr.sender_pc() && !os::is_first_C_frame(&fr)) { 96 fr = os::get_sender_for_C_frame(&fr); 97 } else { 98 break; 99 } 100 } 101 num_of_frames = frame_idx; 102 for (; frame_idx < frames; frame_idx ++) { 103 stack[frame_idx] = NULL; 104 } 105 106 return num_of_frames; 107 } 108 109 110 bool os::unsetenv(const char* name) { 111 assert(name != NULL, "Null pointer"); 112 return (::unsetenv(name) == 0); 113 } | 72 break; 73 } 74 } 75 VMError::report_coredump_status(buffer, success); 76 } 77 78 int os::get_native_stack(address* stack, int frames, int toSkip) { 79 #ifdef _NMT_NOINLINE_ 80 toSkip++; 81 #endif 82 83 int frame_idx = 0; 84 int num_of_frames; // number of frames captured 85 frame fr = os::current_frame(); 86 while (fr.pc() && frame_idx < frames) { 87 if (toSkip > 0) { 88 toSkip --; 89 } else { 90 stack[frame_idx ++] = fr.pc(); 91 } 92 if (fr.fp() == NULL || fr.cb() != NULL || 93 fr.sender_pc() == NULL || os::is_first_C_frame(&fr)) break; 94 95 if (fr.sender_pc() && !os::is_first_C_frame(&fr)) { 96 fr = os::get_sender_for_C_frame(&fr); 97 } else { 98 break; 99 } 100 } 101 num_of_frames = frame_idx; 102 for (; frame_idx < frames; frame_idx ++) { 103 stack[frame_idx] = NULL; 104 } 105 106 return num_of_frames; 107 } 108 109 110 bool os::unsetenv(const char* name) { 111 assert(name != NULL, "Null pointer"); 112 return (::unsetenv(name) == 0); 113 } |