This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Prelinking on ARM with Debug Link


On Tue, 2016-02-16 at 21:46 +0100, Torsten Polle wrote:
> The target architecture is 32bit ARM. The host architecture is 64bit
> X86. Thatâs the reason why field .sec_load_offset is initialised with
> a 64bit wide hexadecimal number. But as the field .sec_load_offset is
> defined only as âunsigned longâ, the compiler complains. As a work
> around I tried to output decimal number instead for the initialisation
> of .sec_load_offset. I can compile alright. But the resulting
> backtrace calculations shown in my previous example produce strange
> results.

OK, I don't have such a setup, but maybe all that is needed, if we
assume negative values are ok, is to not write sec_load_offset out in
hex, but simply in dec. Could you try the attached patch?

Thanks,

Mark
diff --git a/translate.cxx b/translate.cxx
index f792343..1874163 100644
--- a/translate.cxx
+++ b/translate.cxx
@@ -6845,8 +6845,10 @@ dump_unwindsym_cxt (Dwfl_Module *m,
 
 	  Dwarf_Addr dwbias = 0;
 	  dwfl_module_getdwarf (m, &dwbias);
-	  c->output << ".sec_load_offset = 0x"
-		    << hex << debug_frame_off - dwbias << dec << "\n";
+	  /* Note we use dec, not hex, in case host width > target width
+	     and offset is negative.  */
+	  c->output << ".sec_load_offset = "
+		    << debug_frame_off - dwbias << "\n";
 
 	  c->output << "#else\n";
 	  c->output << ".debug_hdr = NULL,\n";
@@ -6865,8 +6867,10 @@ dump_unwindsym_cxt (Dwfl_Module *m,
               c->output << "#if defined(STP_NEED_LINE_DATA)\n";
               Dwarf_Addr dwbias = 0;
               dwfl_module_getdwarf (m, &dwbias);
-              c->output << ".sec_load_offset = 0x"
-                        << hex << debug_frame_off - dwbias << dec << "\n";
+	      /* Note we use dec, not hex, in case host width > target width
+		 and offset is negative.  */
+              c->output << ".sec_load_offset = "
+                        << debug_frame_off - dwbias << "\n";
               c->output << "#else\n";
             }
 	  c->output << ".sec_load_offset = 0\n";

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]