# HG changeset patch # User lorewang # Date 1289964088 -28800 # Node ID 2defe8c853484cc3c3c5d7722dcbb7eb4c39f48e # Parent 240a07ea3a138652e784101a7aececa8870fe6f1 elf2e32 treatment of ARM$$INIT_ARRAY$$Base can break GCCE builds diff -r 240a07ea3a13 -r 2defe8c85348 e32tools/elf2e32/group/release.txt --- a/e32tools/elf2e32/group/release.txt Fri Nov 12 17:02:24 2010 +0800 +++ b/e32tools/elf2e32/group/release.txt Wed Nov 17 11:21:28 2010 +0800 @@ -4,6 +4,11 @@ NOTESRC_RELEASE_REASON Postlinker(elf2e32) Release +version 2.2 build(7) +=============== +Released by Marvin Shi, 26/10/2010 + 1) Bug3494 elf2e32 treatment of ARM$$INIT_ARRAY$$Base can break GCCE builds + version 2.2 build(6) =============== Released by Marvin Shi, 26/10/2010 diff -r 240a07ea3a13 -r 2defe8c85348 e32tools/elf2e32/include/h_ver.h --- a/e32tools/elf2e32/include/h_ver.h Fri Nov 12 17:02:24 2010 +0800 +++ b/e32tools/elf2e32/include/h_ver.h Wed Nov 17 11:21:28 2010 +0800 @@ -18,7 +18,7 @@ const TInt MajorVersion=2; const TInt MinorVersion=2; -const TInt Build=6; +const TInt Build=7; #endif diff -r 240a07ea3a13 -r 2defe8c85348 e32tools/elf2e32/source/pl_elfexecutable.cpp --- a/e32tools/elf2e32/source/pl_elfexecutable.cpp Fri Nov 12 17:02:24 2010 +0800 +++ b/e32tools/elf2e32/source/pl_elfexecutable.cpp Wed Nov 17 11:21:28 2010 +0800 @@ -1438,7 +1438,7 @@ try { - bool limitSymbolFound = false; + bool specialSymbolFound = false; // If Symbol is absolute then assume it came from linker and is a // limit symbol. @@ -1448,19 +1448,21 @@ } else { + // does the symbol point to the address after the end of the code or data segments? if( (iCodeSegmentHdr && aSym->st_value == (iCodeSegmentHdr->p_vaddr + iCodeSegmentHdr->p_memsz)) || (iDataSegmentHdr && aSym->st_value == (iDataSegmentHdr->p_vaddr + iDataSegmentHdr->p_memsz)) ) { - //If Symbol is a $$Limit symbol, then consider the open boundary. - String limitstr = iStringTable + aSym->st_name; - if (limitstr.rfind("$$Limit",limitstr.length()) != String::npos) + //If Symbol contains $$, it is linker generated so consider the open boundary. + //e.g. SHT$$INIT_ARRAY$$Limit and sometimes SHT$$INIT_ARRAY$$Base + String aSymstr = iStringTable + aSym->st_name; + if (aSymstr.rfind("$$",aSymstr.length()) != String::npos) { aHdr = SegmentFromAbs(aSym->st_value); - limitSymbolFound = true; + specialSymbolFound = true; } } - if(!limitSymbolFound ) + if(!specialSymbolFound ) { aHdr = Segment(aSym->st_value); }