Skip to content
  • 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
      --
      000000000000096...
    f5e38b92