right, trying --enable-sanitizer-address on armv7l

Message ID 5f72e895306b8f742bd41d1020ad49e64aa5a958.camel@klomp.org
State Committed
Headers
Series right, trying --enable-sanitizer-address on armv7l |

Commit Message

Mark Wielaard Dec. 9, 2021, 2:23 p.m. UTC
  Hi,

I was trying the new --enable-sanitizer-address on our armv7l buildbot
worker and it almost works as is, except for...

debuginfod.cxx:3472:12: runtime error: reference binding to misaligned
address 0x00561ec9 for type '<unknown>', which requires 2 byte
alignment
0x00561ec9: note: pointer points here
 12 0a 00  2d e9 f0 4f 85 b0 00 af  f8 60 df f8 bc e1 fe 44  f8 68 fa
68 00 2a 04 d0  00 f0 03 0c bc
              ^ 

And indeed removing 'right' here:

         << (sqlite3_column_text(ps_query, 1) ?: (const unsigned char*)
"NULL")
         << endl;

Makes everything PASS.

But I don't understand why. It might be a bug in gcc/libasan (this is
gcc 8.3.0 Debian 10.11 - Buster). I can try upgrading the machine to
Debian 11 - Bullseye this weekend to see if that helps.

Also, do we really want to right align the log here? We don't seem to
align the log text anywhere else.

Cheers,

Mark
  

Comments

Mark Wielaard Dec. 9, 2021, 3:06 p.m. UTC | #1
Hi,

On Thu, 2021-12-09 at 15:23 +0100, Mark Wielaard wrote:
> I was trying the new --enable-sanitizer-address on our armv7l
> buildbot worker and it almost works as is, except for...

I was confusing address sanitizer and the undefined sanitizer. It is
the undefined sanitizer that produces the following runtime error. The 
new address sanitizer seems to work as expected. So I'll at least use
--enable-sanitizer-address on the armv7l CI buildbot worker, but it
would be nice to figure out why the undefined sanitizer is complaining
about this usage of "right" and whether we really need it.

> debuginfod.cxx:3472:12: runtime error: reference binding to misaligned
> address 0x00561ec9 for type '<unknown>', which requires 2 byte
> alignment
> 0x00561ec9: note: pointer points here
>  12 0a 00  2d e9 f0 4f 85 b0 00 af  f8 60 df f8 bc e1 fe 44  f8 68 fa
> 68 00 2a 04 d0  00 f0 03 0c bc
>               ^ 
> 
> And indeed removing 'right' here:
> 
> diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx
> index 35424e47..6fad331a 100644
> --- a/debuginfod/debuginfod.cxx
> +++ b/debuginfod/debuginfod.cxx
> @@ -3469,7 +3469,7 @@ database_stats_report()
>          throw sqlite_exception(rc, "step");
>  
>        obatched(clog)
> -        << right << setw(20) << ((const char*)
> sqlite3_column_text(ps_query, 0) ?: (const char*) "NULL")
> +        << setw(20) << ((const char*) sqlite3_column_text(ps_query, 0)
> ?: (const char*) "NULL")
>          << " "
>          << (sqlite3_column_text(ps_query, 1) ?: (const unsigned char*)
> "NULL")
>          << endl;
> 
> Makes everything PASS.
> 
> But I don't understand why. It might be a bug in gcc/libasan (this is
> gcc 8.3.0 Debian 10.11 - Buster). I can try upgrading the machine to
> Debian 11 - Bullseye this weekend to see if that helps.
> 
> Also, do we really want to right align the log here? We don't seem to
> align the log text anywhere else.
> 
> Cheers,
> 
> Mark
  
Frank Ch. Eigler Dec. 9, 2021, 3:47 p.m. UTC | #2
Hi -

> I was trying the new --enable-sanitizer-address on our armv7l buildbot
> worker and it almost works as is, except for...
> 
> debuginfod.cxx:3472:12: runtime error: reference binding to misaligned
> address 0x00561ec9 for type '<unknown>', which requires 2 byte
> alignment
> [...]
> But I don't understand why. It might be a bug in gcc/libasan (this is
> gcc 8.3.0 Debian 10.11 - Buster). [...]

It must be a bug in gcc/libasan or something.

> Also, do we really want to right align the log here? We don't seem to
> align the log text anywhere else.

This one just prettifies the messages because there is a sequence
metrics & values being printed at startup, so it makes the numbers
line up.  But no great loss to drop; we export those as prometheus
metrics too.

- FChE
  
Mark Wielaard Dec. 9, 2021, 5:04 p.m. UTC | #3
Hi Frank,

On Thu, 2021-12-09 at 10:47 -0500, Frank Ch. Eigler via Elfutils-devel
wrote:
> > debuginfod.cxx:3472:12: runtime error: reference binding to
> > misaligned
> > address 0x00561ec9 for type '<unknown>', which requires 2 byte
> > alignment
> > [...]
> > But I don't understand why. It might be a bug in gcc/libasan (this
> > is
> > gcc 8.3.0 Debian 10.11 - Buster). [...]
> 
> It must be a bug in gcc/libasan or something.

Yeah, I'll try to see if an gcc upgrade on the machine will help (but
that has to wait a couple of days).

> > Also, do we really want to right align the log here? We don't seem
> > to
> > align the log text anywhere else.
> 
> This one just prettifies the messages because there is a sequence
> metrics & values being printed at startup, so it makes the numbers
> line up.  But no great loss to drop; we export those as prometheus
> metrics too.

I am not proud of needing this workaround, but I did push the attached.

Thanks,

Mark
  

Patch

diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx
index 35424e47..6fad331a 100644
--- a/debuginfod/debuginfod.cxx
+++ b/debuginfod/debuginfod.cxx
@@ -3469,7 +3469,7 @@  database_stats_report()
         throw sqlite_exception(rc, "step");
 
       obatched(clog)
-        << right << setw(20) << ((const char*)
sqlite3_column_text(ps_query, 0) ?: (const char*) "NULL")
+        << setw(20) << ((const char*) sqlite3_column_text(ps_query, 0)
?: (const char*) "NULL")
         << " "