Mercurial > hg > graal-compiler
comparison src/share/vm/utilities/elfSymbolTable.cpp @ 2196:d28def44457d
7017009: Secondary out of c-heap memory error reporting out of memory
Summary: Use os::malloc() to allocate buffer to read elf symbols and check for null
Reviewed-by: zgu, phh, dsamersoff, dholmes, dcubed
author | coleenp |
---|---|
date | Thu, 03 Feb 2011 21:30:08 -0500 |
parents | 2d4762ec74af |
children | 1d1603768966 |
comparison
equal
deleted
inserted
replaced
2194:face83fc8882 | 2196:d28def44457d |
---|---|
37 m_status = Decoder::no_error; | 37 m_status = Decoder::no_error; |
38 | 38 |
39 // try to load the string table | 39 // try to load the string table |
40 long cur_offset = ftell(file); | 40 long cur_offset = ftell(file); |
41 if (cur_offset != -1) { | 41 if (cur_offset != -1) { |
42 m_symbols = (Elf_Sym*)NEW_C_HEAP_ARRAY(char, shdr.sh_size); | 42 // call malloc so we can back up if memory allocation fails. |
43 m_symbols = (Elf_Sym*)os::malloc(shdr.sh_size); | |
43 if (m_symbols) { | 44 if (m_symbols) { |
44 if (fseek(file, shdr.sh_offset, SEEK_SET) || | 45 if (fseek(file, shdr.sh_offset, SEEK_SET) || |
45 fread((void*)m_symbols, shdr.sh_size, 1, file) != 1 || | 46 fread((void*)m_symbols, shdr.sh_size, 1, file) != 1 || |
46 fseek(file, cur_offset, SEEK_SET)) { | 47 fseek(file, cur_offset, SEEK_SET)) { |
47 m_status = Decoder::file_invalid; | 48 m_status = Decoder::file_invalid; |
48 FREE_C_HEAP_ARRAY(char, m_symbols); | 49 os::free(m_symbols); |
49 m_symbols = NULL; | 50 m_symbols = NULL; |
50 } | 51 } |
51 } | 52 } |
52 if (m_status == Decoder::no_error) { | 53 if (m_status == Decoder::no_error) { |
53 memcpy(&m_shdr, &shdr, sizeof(Elf_Shdr)); | 54 memcpy(&m_shdr, &shdr, sizeof(Elf_Shdr)); |
57 } | 58 } |
58 } | 59 } |
59 | 60 |
60 ElfSymbolTable::~ElfSymbolTable() { | 61 ElfSymbolTable::~ElfSymbolTable() { |
61 if (m_symbols != NULL) { | 62 if (m_symbols != NULL) { |
62 FREE_C_HEAP_ARRAY(char, m_symbols); | 63 os::free(m_symbols); |
63 } | 64 } |
64 | 65 |
65 if (m_next != NULL) { | 66 if (m_next != NULL) { |
66 delete m_next; | 67 delete m_next; |
67 } | 68 } |