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
--- 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++;
--- 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);
}
--- 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);
--- 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;