From 5724baad41da6673a8ab9d7ef9e7de1019e60392 Mon Sep 17 00:00:00 2001 From: Joshua Warner Date: Wed, 2 May 2012 10:22:44 -0600 Subject: [PATCH] free symbol names after writing codeimage --- src/binaryToObject/tools.h | 4 ++++ src/bootimage.cpp | 11 +++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/binaryToObject/tools.h b/src/binaryToObject/tools.h index dffbb96668..f287a56b99 100644 --- a/src/binaryToObject/tools.h +++ b/src/binaryToObject/tools.h @@ -44,6 +44,10 @@ public: size_t length; String(const char* text); + + inline String(const char* text, size_t length): + text(text), + length(length) {} }; class SymbolInfo { diff --git a/src/bootimage.cpp b/src/bootimage.cpp index 31edca3490..67e89db8fe 100644 --- a/src/bootimage.cpp +++ b/src/bootimage.cpp @@ -1295,7 +1295,7 @@ writeBootImage2(Thread* t, OutputStream* bootimageOutput, OutputStream* codeOutp class MyCompilationHandler : public Processor::CompilationHandler { public: - virtual void compiled(const void* code, unsigned size, unsigned frameSize UNUSED, const char* class_, const char* name, const char* spec) { + virtual void compiled(const void* code, unsigned size UNUSED, unsigned frameSize UNUSED, const char* class_, const char* name, const char* spec) { size_t classLen = strlen(class_); size_t nameLen = strlen(name); size_t specLen = strlen(spec); @@ -1305,7 +1305,6 @@ writeBootImage2(Thread* t, OutputStream* bootimageOutput, OutputStream* codeOutp uint64_t offset = reinterpret_cast(code) - codeOffset; symbols.add(SymbolInfo(offset, completeName)); // printf("%ld %ld %s.%s%s\n", offset, offset + size, class_, name, spec); - free(completeName); } virtual void dispose() {} @@ -1654,10 +1653,14 @@ writeBootImage2(Thread* t, OutputStream* bootimageOutput, OutputStream* codeOutp // return false; // } - compilationHandler.symbols.add(SymbolInfo(0, "_binary_codeimage_bin_start")); - compilationHandler.symbols.add(SymbolInfo(image->codeSize, "_binary_codeimage_bin_end")); + compilationHandler.symbols.add(SymbolInfo(0, strdup("_binary_codeimage_bin_start"))); + compilationHandler.symbols.add(SymbolInfo(image->codeSize, strdup("_binary_codeimage_bin_end"))); platform->writeObject(codeOutput, Slice(compilationHandler.symbols), Slice(code, image->codeSize), Platform::Executable, TargetBytesPerWord); + + for(SymbolInfo* sym = compilationHandler.symbols.begin(); sym != compilationHandler.symbols.end(); sym++) { + free(const_cast((const void*)sym->name.text)); + } } }