• Daniel Borkmann's avatar
    lib: crc32: constify crc32 lookup table · f5e38b92
    Daniel Borkmann authored
    Commit 8f243af4 ("sections: fix const sections for crc32 table")
    removed the compile-time generated crc32 tables from the RO sections,
    because it conflicts with the definition of __cacheline_aligned which
    puts all such aligned data into .data..cacheline_aligned section
    optimized for wasting less space, and can cause alignment issues when
    used in combination with const with some gcc versions like 4.7.0 due to
    a gcc bug [1].
    
    Given that most gcc versions should have the fix by now, we can just use
    ____cacheline_aligned, which only aligns the data but doesn't move it
    into specific sections as opposed to __cacheline_aligned.  In case of
    gcc versions having the mentioned bug, the alignment attribute will have
    no effect, but the data will still be made RO.
    
    After patch tables are in RO:
    
      $ nm -v lib/crc32.o | grep -1 -E "crc32c?table"
      0000000000000000 t arch_local_irq_enable
      0000000000000000 r crc32ctable_le
      0000000000000000 t crc32_exit
      --
      0000000000000960 t test_buf
      0000000000002000 r crc32table_be
      0000000000004000 r crc32table_le
      000000001d1056e5 A __crc_crc32_be
    
      [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52181Signed-off-by: default avatarDaniel Borkmann <dborkman@redhat.com>
    Cc: Joe Mario <jmario@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f5e38b92