lkml.org 
[lkml]   [2018]   [Aug]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH] lib/test_hexdump: fix failure on big endian cpu
    From
    Date


    Le 08/08/2018 à 09:25, Michael Ellerman a écrit :
    > Christophe Leroy <christophe.leroy@c-s.fr> writes:
    >> diff --git a/lib/test_hexdump.c b/lib/test_hexdump.c
    >> index 3f415d8101f3..626f580b4ff7 100644
    >> --- a/lib/test_hexdump.c
    >> +++ b/lib/test_hexdump.c
    >> @@ -32,16 +32,33 @@ static const char * const test_data_2_le[] __initconst = {
    >> "d14c", "9919", "b143", "0caf",
    >> };
    >>
    >> +static const char * const test_data_2_be[] __initconst = {
    >> + "be32", "db7b", "0a18", "93b2",
    >> + "70ba", "c424", "7d83", "349b",
    >> + "a69c", "31ad", "9c0f", "ace9",
    >> + "4cd1", "1999", "43b1", "af0c",
    >> +};
    >> +
    >> static const char * const test_data_4_le[] __initconst = {
    >> "7bdb32be", "b293180a", "24c4ba70", "9b34837d",
    >> "ad319ca6", "e9ac0f9c", "9919d14c", "0cafb143",
    >> };
    >>
    >> +static const char * const test_data_4_be[] __initconst = {
    >> + "be32db7b", "0a1893b2", "70bac424", "7d83349b",
    >> + "a69c31ad", "9c0face9", "4cd11999", "43b1af0c",
    >> +};
    >> +
    >
    > Is there a reason we can't do it all at compile time?

    Codyingstyle suggests to use IS_ENABLED() as much as possible.
    I checked symbols inside resulting vmlinux, only the BE ones are there
    so it has
    the same effect as an #ifdef

    Extract from Documentation/process/codying-style.rst:

    Within code, where possible, use the IS_ENABLED macro to convert a Kconfig
    symbol into a C boolean expression, and use it in a normal C conditional:

    .. code-block:: c

    if (IS_ENABLED(CONFIG_SOMETHING)) {
    ...
    }

    The compiler will constant-fold the conditional away, and include or exclude
    the block of code just as with an #ifdef, so this will not add any runtime
    overhead. However, this approach still allows the C compiler to see the
    code
    inside the block, and check it for correctness (syntax, types, symbol
    references, etc). Thus, you still have to use an #ifdef if the code
    inside the
    block references symbols that will not exist if the condition is not met.

    Christophe

    >
    > eg:
    >
    > static const char * const test_data_4[] __initconst = {
    > #ifdef CONFIG_CPU_LITTLE_ENDIAN
    > "7bdb32be", "b293180a", "24c4ba70", "9b34837d",
    > "ad319ca6", "e9ac0f9c", "9919d14c", "0cafb143",
    > #else
    > "be32db7b", "0a1893b2", "70bac424", "7d83349b",
    > "a69c31ad", "9c0face9", "4cd11999", "43b1af0c",
    > #endif
    > };
    >
    >
    > cheers
    >

    \
     
     \ /
      Last update: 2018-08-08 09:45    [W:3.796 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site