# HG changeset patch # User Mike Kinghan # Date 1280920075 -3600 # Node ID 3a31ca4b29c4fd1a00d59bacf303fe18055363bd # Parent d10c1f04b2be4e5332d220c0cb534215634ed3de 1) Latest fix for bug 2979 - [GCCE] elf2e32 --dump generates RVCT assembly. Implements Stefan Karlsson's comment #21 2) Merges William Robert's elf2e32 patch re. bug 3359, changset buildtools 77c47a56e1f7 3) Fixes a Windows/Linux path-delimiter bug in romnibus.pl diff -r d10c1f04b2be -r 3a31ca4b29c4 e32tools/elf2e32/source/filedump.cpp --- a/e32tools/elf2e32/source/filedump.cpp Sat Jul 17 15:09:24 2010 +0100 +++ b/e32tools/elf2e32/source/filedump.cpp Wed Aug 04 12:07:55 2010 +0100 @@ -215,7 +215,7 @@ aItr++; continue; } - fputs("\t.extern ",fptr); + fputs("\t.global ",fptr); fputs(aSym->SymbolName(),fptr); fputs("\n",fptr); aItr++; diff -r d10c1f04b2be -r 3a31ca4b29c4 e32tools/elf2e32/source/pl_elfexecutable.cpp --- a/e32tools/elf2e32/source/pl_elfexecutable.cpp Sat Jul 17 15:09:24 2010 +0100 +++ b/e32tools/elf2e32/source/pl_elfexecutable.cpp Wed Aug 04 12:07:55 2010 +0100 @@ -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,22 @@ } 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) - { - aHdr = SegmentFromAbs(aSym->st_value); - limitSymbolFound = true; - } + //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); + specialSymbolFound = true; + } + } - if(!limitSymbolFound ) + if(!specialSymbolFound ) { aHdr = Segment(aSym->st_value); } diff -r d10c1f04b2be -r 3a31ca4b29c4 imgtools/romtools/rombuild/r_obey.cpp --- a/imgtools/romtools/rombuild/r_obey.cpp Sat Jul 17 15:09:24 2010 +0100 +++ b/imgtools/romtools/rombuild/r_obey.cpp Wed Aug 04 12:07:55 2010 +0100 @@ -1169,7 +1169,7 @@ if (!test.is_open()) { - Print(EError,"Cannot open file %s for input.\n",iReader.Word(1)); + Print(EError,"Cannot open file %s for input.\n",nname); if(EKeywordHardwareConfigRepositoryData == aKeyword) { free(nname); diff -r d10c1f04b2be -r 3a31ca4b29c4 imgtools/romtools/rombuild/romnibus.pl --- a/imgtools/romtools/rombuild/romnibus.pl Sat Jul 17 15:09:24 2010 +0100 +++ b/imgtools/romtools/rombuild/romnibus.pl Wed Aug 04 12:07:55 2010 +0100 @@ -165,7 +165,8 @@ pop(@path_parts); } $e32path = File::Spec->catdir((@path_parts,"os")); -$base_path = $e32path; # ?? +$e32path .= ($on_windows ? '\\' : '/'); +$base_path = $e32path; # Can't be quite right. $rombuildpath = File::Spec->catfile($e32path,"kernelhwsrv","kernel","eka","rombuild"); use E32Plat;