[PATCH v4 00/16] linux: generalize sections, ranges and linker tables

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: "Luis R. Rodriguez" <mcgrof@xxxxxxxxxx>

This v4 addresses feedback from the previous v3 series [0], and also
addresses a huge array of additional tests against many architectures
outside of what 0-day provides. As I mentioned in my last v3 series,
0-day had only found one issue with the series, a blackfin architecture
linker issue with the last series. Guenter Rock was kind enough to give
my series a test spin on his test bed and he found quite a bit of other
oddball issues with obscure architectures, and even on x86 with an old
toolchain. After a lot of work and coordinating with a few maintainers
I'm happy to report all issues found so far through all possible testing
I could do are now fixed, this series also addresses all feedback from
the last series, as such this goes submitted as PATCH form.

In addressing fixing this work on a few architectures some of the previous
patches are further simplified. The kprobes port to linker tables is made
much easier now that I've addressed moving out core kprobe declarations
into asm-generic/kprobes.h. Refer to the patch "kprobes: move kprobe
declarations to asm-generic/kprobes.h". This makes for a much cleaner
solution across architectures.

Boris feedback on making the code bit rot feature optional is addressed
by using a new Kconfig symbol for this, CONFIG_BUILD_AVOID_BITROT,
but given Greg's concerns over lack of clarity over what this was all about
I've ripped that functionality out into its own patch with a bit more
extensive documentation and re-wording. See the patch "kbuild: enable option
to force compile force-obj-y and force-lib-y". I hope makes it clear how
linker tables can help with avoiding code bit rot. I've gone with a new
Kconfig symbol CONFIG_BUILD_AVOID_BITROT given CONFIG_COMPILE_TEST is
not available on UML, this feature is desirable on all architectures.

The documentation is revamped, now that the DocBook format is deprecated
I ported the documention into the trendy hipster Sphinx documentation
format.

AT Boris' request I've adapated the userspace linker table application
forintegration into the kernel under tools/ to make it easier to keep
things in sync, however since this requires a bit of changes to some headers
in tools/ I'll submit that separately.

[0] https://lkml.kernel.org/r/1469222687-1600-1-git-send-email-mcgrof@xxxxxxxxxx

If you'd like this in git-form, you can get it on the 20160819-linker-table-v4
branch of my linux-next tree on kernel.org, this also includes the series of
the linker table userspace sandbox:

https://git.kernel.org/cgit/linux/kernel/git/mcgrof/linux-next.git/log/?h=20160819-linker-table-v4

Please let me know if there are any concerns or questions.

Luis R. Rodriguez (16):
  x86: remove LTO_REFERENCE_INITCALL()
  dell-smo8800: include uaccess.h
  scripts/module-common.lds: enable generation
  generic-sections: add section core helpers
  xtensa: skip adding literal when SORT() is used
  ranges.h: add helpers to build and identify Linux section ranges
  tables.h: add linker table support
  kbuild: enable option to force compile force-obj-y and force-lib-y
  firmware/Makefile: force recompilation if makefile changes
  firmware: port built-in section to linker table
  jump_label: move guard #endif down where it belongs
  jump_label: port __jump_table to linker tables
  dynamic_debug: port to use linker tables
  kprobes: move kprobe declarations to asm-generic/kprobes.h
  kprobes: port .kprobes.text to section range
  kprobes: port blacklist kprobes to linker table

 .gitignore                                         |   2 +
 Documentation/index.rst                            |   1 +
 Documentation/kbuild/makefiles.txt                 |  36 ++
 Documentation/sections/conf.py                     |   4 +
 Documentation/sections/index.rst                   |  13 +
 Documentation/sections/linker-tables.rst           | 202 +++++++
 Documentation/sections/ranges.rst                  |  49 ++
 Documentation/sections/section-core.rst            | 153 +++++
 MAINTAINERS                                        |  37 ++
 Makefile                                           |   6 +-
 arch/alpha/include/asm/Kbuild                      |   4 +
 arch/arc/include/asm/Kbuild                        |   3 +
 arch/arc/include/asm/kprobes.h                     |   6 +-
 arch/arc/kernel/vmlinux.lds.S                      |   1 -
 arch/arm/include/asm/Kbuild                        |   3 +
 arch/arm/include/asm/jump_label.h                  |   6 +-
 arch/arm/include/asm/kprobes.h                     |   4 +
 arch/arm/kernel/entry-armv.S                       |   3 +-
 arch/arm/kernel/vmlinux-xip.lds.S                  |   1 -
 arch/arm/kernel/vmlinux.lds.S                      |   1 -
 arch/arm/probes/decode.h                           |   1 +
 arch/arm64/include/asm/Kbuild                      |   3 +
 arch/arm64/include/asm/jump_label.h                |   6 +-
 arch/arm64/include/asm/kprobes.h                   |   4 +
 arch/arm64/kernel/armv8_deprecated.c               |   1 +
 arch/arm64/kernel/insn.c                           |   1 +
 arch/arm64/kernel/probes/kprobes.c                 |   4 +-
 arch/arm64/kernel/vmlinux.lds.S                    |   1 -
 arch/avr32/include/asm/Kbuild                      |   3 +
 arch/avr32/include/asm/kprobes.h                   |   4 +
 arch/avr32/kernel/entry-avr32b.S                   |  13 +-
 arch/avr32/kernel/vmlinux.lds.S                    |   1 -
 arch/blackfin/include/asm/Kbuild                   |   4 +
 arch/blackfin/kernel/vmlinux.lds.S                 |   1 -
 arch/c6x/include/asm/Kbuild                        |   3 +
 arch/c6x/include/asm/tables.h                      |  26 +
 arch/c6x/kernel/vmlinux.lds.S                      |   1 -
 arch/cris/include/asm/Kbuild                       |   4 +
 arch/frv/include/asm/Kbuild                        |   4 +
 arch/h8300/include/asm/Kbuild                      |   4 +
 arch/hexagon/include/asm/Kbuild                    |   4 +
 arch/hexagon/kernel/vmlinux.lds.S                  |   1 -
 arch/ia64/include/asm/Kbuild                       |   3 +
 arch/ia64/include/asm/kprobes.h                    |   7 +-
 arch/ia64/kernel/jprobes.S                         |   3 +-
 arch/ia64/kernel/vmlinux.lds.S                     |   1 -
 arch/ia64/lib/flush.S                              |   6 +-
 arch/m32r/include/asm/Kbuild                       |   4 +
 arch/m68k/include/asm/Kbuild                       |   4 +
 arch/metag/include/asm/Kbuild                      |   4 +
 arch/metag/kernel/vmlinux.lds.S                    |   1 -
 arch/microblaze/include/asm/Kbuild                 |   4 +
 arch/microblaze/kernel/vmlinux.lds.S               |   1 -
 arch/mips/include/asm/Kbuild                       |   3 +
 arch/mips/include/asm/jump_label.h                 |   6 +-
 arch/mips/include/asm/kprobes.h                    |   6 +-
 arch/mips/kernel/vmlinux.lds.S                     |   1 -
 arch/mn10300/include/asm/Kbuild                    |   3 +
 arch/mn10300/include/asm/kprobes.h                 |   4 +
 arch/mn10300/kernel/vmlinux.lds.S                  |   1 -
 arch/nios2/include/asm/Kbuild                      |   4 +
 arch/nios2/kernel/vmlinux.lds.S                    |   1 -
 arch/openrisc/include/asm/Kbuild                   |   4 +
 arch/openrisc/kernel/vmlinux.lds.S                 |   1 -
 arch/parisc/include/asm/Kbuild                     |   4 +
 arch/parisc/kernel/vmlinux.lds.S                   |   1 -
 arch/powerpc/include/asm/Kbuild                    |   3 +
 arch/powerpc/include/asm/jump_label.h              |   8 +-
 arch/powerpc/include/asm/kprobes.h                 |   6 +
 arch/powerpc/include/asm/ppc_asm.h                 |   7 +-
 arch/powerpc/kernel/vmlinux.lds.S                  |   1 -
 arch/s390/include/asm/Kbuild                       |   3 +
 arch/s390/include/asm/jump_label.h                 |   6 +-
 arch/s390/include/asm/kprobes.h                    |   4 +
 arch/s390/kernel/entry.S                           |   5 +-
 arch/s390/kernel/kprobes.c                         |   6 +-
 arch/s390/kernel/mcount.S                          |   3 +-
 arch/s390/kernel/vmlinux.lds.S                     |   1 -
 arch/score/include/asm/Kbuild                      |   4 +
 arch/score/kernel/vmlinux.lds.S                    |   1 -
 arch/sh/include/asm/Kbuild                         |   3 +
 arch/sh/include/asm/kprobes.h                      |   2 +
 arch/sh/kernel/vmlinux.lds.S                       |   1 -
 arch/sparc/include/asm/Kbuild                      |   3 +
 arch/sparc/include/asm/jump_label.h                |   6 +-
 arch/sparc/include/asm/kprobes.h                   |   5 +
 arch/sparc/kernel/vmlinux.lds.S                    |   1 -
 arch/sparc/mm/ultra.S                              |   3 +-
 arch/tile/include/asm/Kbuild                       |   3 +
 arch/tile/include/asm/kprobes.h                    |   6 +-
 arch/tile/kernel/vmlinux.lds.S                     |   1 -
 arch/um/include/asm/Kbuild                         |   4 +
 arch/unicore32/include/asm/Kbuild                  |   3 +
 arch/unicore32/include/asm/section-core.h          |  19 +
 arch/x86/include/asm/Kbuild                        |   3 +
 arch/x86/include/asm/jump_label.h                  |  10 +-
 arch/x86/include/asm/kprobes.h                     |   6 +
 arch/x86/kernel/cpu/microcode/core.c               |   8 +-
 arch/x86/kernel/kprobes/core.c                     |  11 +-
 arch/x86/kernel/vmlinux.lds.S                      |   1 -
 arch/x86/tools/relocs.c                            |   4 +
 arch/xtensa/include/asm/Kbuild                     |   4 +
 arch/xtensa/kernel/Makefile                        |   8 +-
 drivers/base/firmware_class.c                      |  12 +-
 drivers/platform/x86/dell-smo8800.c                |   1 +
 firmware/Makefile                                  |   6 +-
 include/asm-generic/kprobes.h                      |  26 +
 include/asm-generic/ranges.h                       | 103 ++++
 include/asm-generic/section-core.h                 | 341 +++++++++++
 include/asm-generic/sections.h                     |   4 +-
 include/asm-generic/tables.h                       |  50 ++
 include/asm-generic/vmlinux.lds.h                  |  73 +--
 include/linux/compiler.h                           |   8 -
 include/linux/dynamic_debug.h                      |   5 +-
 include/linux/init.h                               |  20 +-
 include/linux/jump_label.h                         |   8 +-
 include/linux/kprobes.h                            |  24 +-
 include/linux/ranges.h                             | 128 +++++
 include/linux/sections.h                           | 111 ++++
 include/linux/tables.h                             | 638 +++++++++++++++++++++
 init/Kconfig                                       |  22 +
 kernel/jump_label.c                                |  17 +-
 kernel/kprobes.c                                   |  17 +-
 lib/dynamic_debug.c                                |  13 +-
 scripts/Makefile.build                             |   7 +-
 scripts/Makefile.clean                             |   2 +
 scripts/Makefile.lib                               |  11 +
 scripts/Makefile.modpost                           |   2 +-
 scripts/mod/modpost.c                              |   2 +-
 scripts/{module-common.lds => module-common.lds.S} |   6 +
 scripts/recordmcount.c                             |   2 +-
 scripts/recordmcount.pl                            |   2 +-
 tools/objtool/special.c                            |   2 +-
 133 files changed, 2328 insertions(+), 214 deletions(-)
 create mode 100644 Documentation/sections/conf.py
 create mode 100644 Documentation/sections/index.rst
 create mode 100644 Documentation/sections/linker-tables.rst
 create mode 100644 Documentation/sections/ranges.rst
 create mode 100644 Documentation/sections/section-core.rst
 create mode 100644 arch/c6x/include/asm/tables.h
 create mode 100644 arch/unicore32/include/asm/section-core.h
 create mode 100644 include/asm-generic/kprobes.h
 create mode 100644 include/asm-generic/ranges.h
 create mode 100644 include/asm-generic/section-core.h
 create mode 100644 include/asm-generic/tables.h
 create mode 100644 include/linux/ranges.h
 create mode 100644 include/linux/sections.h
 create mode 100644 include/linux/tables.h
 rename scripts/{module-common.lds => module-common.lds.S} (80%)

-- 
2.9.2

--
To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux