Re: [PATCH] arch: use ASM_NL instead of ';' for assembler new line character in the macro

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

 



Hi Chen,

On Mon, Oct 28, 2013 at 2:30 PM, Chen Gang <gang.chen@xxxxxxxxxxx> wrote:
> For some toolchains, they use another character as newline in a macro
> (e.g. arc uses '`'), so for generic assembly code, need use ASM_NL (a
> macro) instead of ';' for it.
> Since "linux/export.h" are mainly used for exporting work, then our fix
> more likely belongs to "linux/linkage.h", and we need add the related
> checking in "linkage.h".
>
> Also need notice 80 columns wrap, and '\t' for each line.
>
>
> Signed-off-by: Chen Gang <gang.chen@xxxxxxxxxxx>
> ---
>  arch/arc/include/asm/linkage.h    |    2 +
>  include/asm-generic/vmlinux.lds.h |  350 +++++++++++++++++++------------------

Actually vmlinux.lds.h is not an assembly code, but rather a linker script,
later preprocessed by cpp.

>  include/linux/linkage.h           |   19 ++-
>  3 files changed, 190 insertions(+), 181 deletions(-)
>
> diff --git a/arch/arc/include/asm/linkage.h b/arch/arc/include/asm/linkage.h
> index 0283e9e..66ee552 100644
> --- a/arch/arc/include/asm/linkage.h
> +++ b/arch/arc/include/asm/linkage.h
> @@ -11,6 +11,8 @@
>
>  #ifdef __ASSEMBLY__
>
> +#define ASM_NL          `      /* use '`' to mark new line in macro */
> +
>  /* Can't use the ENTRY macro in linux/linkage.h
>   * gas considers ';' as comment vs. newline
>   */
> diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
> index bc2121f..0ca99a9 100644
> --- a/include/asm-generic/vmlinux.lds.h
> +++ b/include/asm-generic/vmlinux.lds.h
> @@ -10,28 +10,28 @@
>   * ENTRY(...)
>   * SECTIONS
>   * {
> - *     . = START;
> - *     __init_begin = .;
> + *     . = START
> + *     __init_begin = .

This doesn't look correct: these are simple assignments (inside a
comment) inside
a linker script, and simple assignment definition in 'info ld' says
that semicolon after
expression is required. Same for all the following removals of ';' and
replacements
of ';' with ASM_NL in this file.

>   *     HEAD_TEXT_SECTION
>   *     INIT_TEXT_SECTION(PAGE_SIZE)
>   *     INIT_DATA_SECTION(...)
>   *     PERCPU_SECTION(CACHELINE_SIZE)
> - *     __init_end = .;
> + *     __init_end = .
>   *
> - *     _stext = .;
> + *     _stext = .
>   *     TEXT_SECTION = 0
> - *     _etext = .;
> + *     _etext = .
>   *
> - *      _sdata = .;
> + *      _sdata = .
>   *     RO_DATA_SECTION(PAGE_SIZE)
>   *     RW_DATA_SECTION(...)
> - *     _edata = .;
> + *     _edata = .
>   *
>   *     EXCEPTION_TABLE(...)
>   *     NOTES
>   *
>   *     BSS_SECTION(0, 0, 0)
> - *     _end = .;
> + *     _end = .
>   *
>   *     STABS_DEBUG
>   *     DWARF_DEBUG
> @@ -52,7 +52,7 @@
>  #define LOAD_OFFSET 0
>  #endif
>
> -#include <linux/export.h>
> +#include <linux/linkage.h>
>
>  /* Align . to a 8 byte boundary equals to maximum function alignment. */
>  #define ALIGN_FUNCTION()  . = ALIGN(8)
> @@ -85,63 +85,65 @@
>  #endif
>
>  #ifdef CONFIG_FTRACE_MCOUNT_RECORD
> -#define MCOUNT_REC()   . = ALIGN(8);                           \
> -                       VMLINUX_SYMBOL(__start_mcount_loc) = .; \
> -                       *(__mcount_loc)                         \
> -                       VMLINUX_SYMBOL(__stop_mcount_loc) = .;
> +#define MCOUNT_REC()   . = ALIGN(8) ASM_NL                             \
> +                       VMLINUX_SYMBOL(__start_mcount_loc) = . ASM_NL   \
> +                       *(__mcount_loc)                                 \
> +                       VMLINUX_SYMBOL(__stop_mcount_loc) = . ASM_NL
>  #else
>  #define MCOUNT_REC()
>  #endif
>
>  #ifdef CONFIG_TRACE_BRANCH_PROFILING
> -#define LIKELY_PROFILE()       VMLINUX_SYMBOL(__start_annotated_branch_profile) = .; \
> -                               *(_ftrace_annotated_branch)                           \
> -                               VMLINUX_SYMBOL(__stop_annotated_branch_profile) = .;
> +#define LIKELY_PROFILE()                                                   \
> +               VMLINUX_SYMBOL(__start_annotated_branch_profile) = . ASM_NL \
> +               *(_ftrace_annotated_branch)                                 \
> +               VMLINUX_SYMBOL(__stop_annotated_branch_profile) = . ASM_NL
>  #else
>  #define LIKELY_PROFILE()
>  #endif
>
>  #ifdef CONFIG_PROFILE_ALL_BRANCHES
> -#define BRANCH_PROFILE()       VMLINUX_SYMBOL(__start_branch_profile) = .;   \
> -                               *(_ftrace_branch)                             \
> -                               VMLINUX_SYMBOL(__stop_branch_profile) = .;
> +#define BRANCH_PROFILE()                                               \
> +               VMLINUX_SYMBOL(__start_branch_profile) = . ASM_NL       \
> +               *(_ftrace_branch)                                       \
> +               VMLINUX_SYMBOL(__stop_branch_profile) = . ASM_NL
>  #else
>  #define BRANCH_PROFILE()
>  #endif
>
>  #ifdef CONFIG_EVENT_TRACING
> -#define FTRACE_EVENTS()        . = ALIGN(8);                                   \
> -                       VMLINUX_SYMBOL(__start_ftrace_events) = .;      \
> -                       *(_ftrace_events)                               \
> -                       VMLINUX_SYMBOL(__stop_ftrace_events) = .;
> +#define FTRACE_EVENTS()        . = ALIGN(8) ASM_NL                              \
> +                       VMLINUX_SYMBOL(__start_ftrace_events) = . ASM_NL \
> +                       *(_ftrace_events)                                \
> +                       VMLINUX_SYMBOL(__stop_ftrace_events) = . ASM_NL
>  #else
>  #define FTRACE_EVENTS()
>  #endif
>
>  #ifdef CONFIG_TRACING
> -#define TRACE_PRINTKS() VMLINUX_SYMBOL(__start___trace_bprintk_fmt) = .;      \
> +#define TRACE_PRINTKS() VMLINUX_SYMBOL(__start___trace_bprintk_fmt) = . ASM_NL \
>                          *(__trace_printk_fmt) /* Trace_printk fmt' pointer */ \
> -                        VMLINUX_SYMBOL(__stop___trace_bprintk_fmt) = .;
> -#define TRACEPOINT_STR() VMLINUX_SYMBOL(__start___tracepoint_str) = .; \
> -                        *(__tracepoint_str) /* Trace_printk fmt' pointer */ \
> -                        VMLINUX_SYMBOL(__stop___tracepoint_str) = .;
> +                        VMLINUX_SYMBOL(__stop___trace_bprintk_fmt) = . ASM_NL
> +#define TRACEPOINT_STR() VMLINUX_SYMBOL(__start___tracepoint_str) = . ASM_NL   \
> +                        *(__tracepoint_str) /* Trace_printk fmt' pointer */   \
> +                        VMLINUX_SYMBOL(__stop___tracepoint_str) = . ASM_NL
>  #else
>  #define TRACE_PRINTKS()
>  #define TRACEPOINT_STR()
>  #endif
>
>  #ifdef CONFIG_FTRACE_SYSCALLS
> -#define TRACE_SYSCALLS() . = ALIGN(8);                                 \
> -                        VMLINUX_SYMBOL(__start_syscalls_metadata) = .; \
> -                        *(__syscalls_metadata)                         \
> -                        VMLINUX_SYMBOL(__stop_syscalls_metadata) = .;
> +#define TRACE_SYSCALLS() . = ALIGN(8) ASM_NL                                  \
> +                        VMLINUX_SYMBOL(__start_syscalls_metadata) = . ASM_NL  \
> +                        *(__syscalls_metadata)                                \
> +                        VMLINUX_SYMBOL(__stop_syscalls_metadata) = . ASM_NL
>  #else
>  #define TRACE_SYSCALLS()
>  #endif
>
>  #ifdef CONFIG_CLKSRC_OF
> -#define CLKSRC_OF_TABLES() . = ALIGN(8);                               \
> -                          VMLINUX_SYMBOL(__clksrc_of_table) = .;       \
> +#define CLKSRC_OF_TABLES() . = ALIGN(8) ASM_NL                         \
> +                          VMLINUX_SYMBOL(__clksrc_of_table) = . ASM_NL \
>                            *(__clksrc_of_table)                         \
>                            *(__clksrc_of_table_end)
>  #else
> @@ -150,8 +152,8 @@
>
>  #ifdef CONFIG_IRQCHIP
>  #define IRQCHIP_OF_MATCH_TABLE()                                       \
> -       . = ALIGN(8);                                                   \
> -       VMLINUX_SYMBOL(__irqchip_begin) = .;                            \
> +       . = ALIGN(8) ASM_NL                                             \
> +       VMLINUX_SYMBOL(__irqchip_begin) = . ASM_NL                      \
>         *(__irqchip_of_table)                                           \
>         *(__irqchip_of_end)
>  #else
> @@ -159,19 +161,19 @@
>  #endif
>
>  #ifdef CONFIG_COMMON_CLK
> -#define CLK_OF_TABLES() . = ALIGN(8);                          \
> -                       VMLINUX_SYMBOL(__clk_of_table) = .;     \
> -                       *(__clk_of_table)                       \
> +#define CLK_OF_TABLES() . = ALIGN(8) ASM_NL                            \
> +                       VMLINUX_SYMBOL(__clk_of_table) = . ASM_NL       \
> +                       *(__clk_of_table)                               \
>                         *(__clk_of_table_end)
>  #else
>  #define CLK_OF_TABLES()
>  #endif
>
>  #define KERNEL_DTB()                                                   \
> -       STRUCT_ALIGN();                                                 \
> -       VMLINUX_SYMBOL(__dtb_start) = .;                                \
> +       STRUCT_ALIGN() ASM_NL                                           \
> +       VMLINUX_SYMBOL(__dtb_start) = . ASM_NL                          \
>         *(.dtb.init.rodata)                                             \
> -       VMLINUX_SYMBOL(__dtb_end) = .;
> +       VMLINUX_SYMBOL(__dtb_end) = . ASM_NL
>
>  /* .data section */
>  #define DATA_DATA                                                      \
> @@ -181,17 +183,17 @@
>         MEM_KEEP(init.data)                                             \
>         MEM_KEEP(exit.data)                                             \
>         *(.data.unlikely)                                               \
> -       STRUCT_ALIGN();                                                 \
> +       STRUCT_ALIGN() ASM_NL                                           \
>         *(__tracepoints)                                                \
>         /* implement dynamic printk debug */                            \
> -       . = ALIGN(8);                                                   \
> -       VMLINUX_SYMBOL(__start___jump_table) = .;                       \
> +       . = ALIGN(8) ASM_NL                                             \
> +       VMLINUX_SYMBOL(__start___jump_table) = . ASM_NL                 \
>         *(__jump_table)                                                 \
> -       VMLINUX_SYMBOL(__stop___jump_table) = .;                        \
> -       . = ALIGN(8);                                                   \
> -       VMLINUX_SYMBOL(__start___verbose) = .;                          \
> +       VMLINUX_SYMBOL(__stop___jump_table) = . ASM_NL                  \
> +       . = ALIGN(8) ASM_NL                                             \
> +       VMLINUX_SYMBOL(__start___verbose) = . ASM_NL                    \
>         *(__verbose)                                                    \
> -       VMLINUX_SYMBOL(__stop___verbose) = .;                           \
> +       VMLINUX_SYMBOL(__stop___verbose) = . ASM_NL                     \
>         LIKELY_PROFILE()                                                \
>         BRANCH_PROFILE()                                                \
>         TRACE_PRINTKS()                                                 \
> @@ -201,42 +203,42 @@
>   * Data section helpers
>   */
>  #define NOSAVE_DATA                                                    \
> -       . = ALIGN(PAGE_SIZE);                                           \
> -       VMLINUX_SYMBOL(__nosave_begin) = .;                             \
> +       . = ALIGN(PAGE_SIZE) ASM_NL                                     \
> +       VMLINUX_SYMBOL(__nosave_begin) = . ASM_NL                       \
>         *(.data..nosave)                                                \
> -       . = ALIGN(PAGE_SIZE);                                           \
> -       VMLINUX_SYMBOL(__nosave_end) = .;
> +       . = ALIGN(PAGE_SIZE) ASM_NL                                     \
> +       VMLINUX_SYMBOL(__nosave_end) = . ASM_NL
>
>  #define PAGE_ALIGNED_DATA(page_align)                                  \
> -       . = ALIGN(page_align);                                          \
> +       . = ALIGN(page_align) ASM_NL                                    \
>         *(.data..page_aligned)
>
>  #define READ_MOSTLY_DATA(align)                                                \
> -       . = ALIGN(align);                                               \
> +       . = ALIGN(align) ASM_NL                                         \
>         *(.data..read_mostly)                                           \
> -       . = ALIGN(align);
> +       . = ALIGN(align) ASM_NL
>
>  #define CACHELINE_ALIGNED_DATA(align)                                  \
> -       . = ALIGN(align);                                               \
> +       . = ALIGN(align) ASM_NL                                         \
>         *(.data..cacheline_aligned)
>
>  #define INIT_TASK_DATA(align)                                          \
> -       . = ALIGN(align);                                               \
> +       . = ALIGN(align) ASM_NL                                         \
>         *(.data..init_task)
>
>  /*
>   * Read only Data
>   */
>  #define RO_DATA_SECTION(align)                                         \
> -       . = ALIGN((align));                                             \
> +       . = ALIGN((align)) ASM_NL                                       \
>         .rodata           : AT(ADDR(.rodata) - LOAD_OFFSET) {           \
> -               VMLINUX_SYMBOL(__start_rodata) = .;                     \
> +               VMLINUX_SYMBOL(__start_rodata) = . ASM_NL               \
>                 *(.rodata) *(.rodata.*)                                 \
>                 *(__vermagic)           /* Kernel version magic */      \
> -               . = ALIGN(8);                                           \
> -               VMLINUX_SYMBOL(__start___tracepoints_ptrs) = .;         \
> +               . = ALIGN(8) ASM_NL                                     \
> +               VMLINUX_SYMBOL(__start___tracepoints_ptrs) = . ASM_NL   \
>                 *(__tracepoints_ptrs)   /* Tracepoints: pointer array */\
> -               VMLINUX_SYMBOL(__stop___tracepoints_ptrs) = .;          \
> +               VMLINUX_SYMBOL(__stop___tracepoints_ptrs) = . ASM_NL    \
>                 *(__tracepoints_strings)/* Tracepoints: strings */      \
>         }                                                               \
>                                                                         \
> @@ -248,106 +250,106 @@
>                                                                         \
>         /* PCI quirks */                                                \
>         .pci_fixup        : AT(ADDR(.pci_fixup) - LOAD_OFFSET) {        \
> -               VMLINUX_SYMBOL(__start_pci_fixups_early) = .;           \
> +               VMLINUX_SYMBOL(__start_pci_fixups_early) = . ASM_NL     \
>                 *(.pci_fixup_early)                                     \
> -               VMLINUX_SYMBOL(__end_pci_fixups_early) = .;             \
> -               VMLINUX_SYMBOL(__start_pci_fixups_header) = .;          \
> +               VMLINUX_SYMBOL(__end_pci_fixups_early) = . ASM_NL       \
> +               VMLINUX_SYMBOL(__start_pci_fixups_header) = . ASM_NL    \
>                 *(.pci_fixup_header)                                    \
> -               VMLINUX_SYMBOL(__end_pci_fixups_header) = .;            \
> -               VMLINUX_SYMBOL(__start_pci_fixups_final) = .;           \
> +               VMLINUX_SYMBOL(__end_pci_fixups_header) = . ASM_NL      \
> +               VMLINUX_SYMBOL(__start_pci_fixups_final) = . ASM_NL     \
>                 *(.pci_fixup_final)                                     \
> -               VMLINUX_SYMBOL(__end_pci_fixups_final) = .;             \
> -               VMLINUX_SYMBOL(__start_pci_fixups_enable) = .;          \
> +               VMLINUX_SYMBOL(__end_pci_fixups_final) = . ASM_NL       \
> +               VMLINUX_SYMBOL(__start_pci_fixups_enable) = . ASM_NL    \
>                 *(.pci_fixup_enable)                                    \
> -               VMLINUX_SYMBOL(__end_pci_fixups_enable) = .;            \
> -               VMLINUX_SYMBOL(__start_pci_fixups_resume) = .;          \
> +               VMLINUX_SYMBOL(__end_pci_fixups_enable) = . ASM_NL      \
> +               VMLINUX_SYMBOL(__start_pci_fixups_resume) = . ASM_NL    \
>                 *(.pci_fixup_resume)                                    \
> -               VMLINUX_SYMBOL(__end_pci_fixups_resume) = .;            \
> -               VMLINUX_SYMBOL(__start_pci_fixups_resume_early) = .;    \
> +               VMLINUX_SYMBOL(__end_pci_fixups_resume) = . ASM_NL      \
> +               VMLINUX_SYMBOL(__start_pci_fixups_resume_early) = . ASM_NL \
>                 *(.pci_fixup_resume_early)                              \
> -               VMLINUX_SYMBOL(__end_pci_fixups_resume_early) = .;      \
> -               VMLINUX_SYMBOL(__start_pci_fixups_suspend) = .;         \
> +               VMLINUX_SYMBOL(__end_pci_fixups_resume_early) = . ASM_NL \
> +               VMLINUX_SYMBOL(__start_pci_fixups_suspend) = . ASM_NL   \
>                 *(.pci_fixup_suspend)                                   \
> -               VMLINUX_SYMBOL(__end_pci_fixups_suspend) = .;           \
> +               VMLINUX_SYMBOL(__end_pci_fixups_suspend) = . ASM_NL     \
>         }                                                               \
>                                                                         \
>         /* Built-in firmware blobs */                                   \
>         .builtin_fw        : AT(ADDR(.builtin_fw) - LOAD_OFFSET) {      \
> -               VMLINUX_SYMBOL(__start_builtin_fw) = .;                 \
> +               VMLINUX_SYMBOL(__start_builtin_fw) = . ASM_NL           \
>                 *(.builtin_fw)                                          \
> -               VMLINUX_SYMBOL(__end_builtin_fw) = .;                   \
> +               VMLINUX_SYMBOL(__end_builtin_fw) = . ASM_NL             \
>         }                                                               \
>                                                                         \
>         TRACEDATA                                                       \
>                                                                         \
>         /* Kernel symbol table: Normal symbols */                       \
>         __ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {         \
> -               VMLINUX_SYMBOL(__start___ksymtab) = .;                  \
> +               VMLINUX_SYMBOL(__start___ksymtab) = . ASM_NL            \
>                 *(SORT(___ksymtab+*))                                   \
> -               VMLINUX_SYMBOL(__stop___ksymtab) = .;                   \
> +               VMLINUX_SYMBOL(__stop___ksymtab) = . ASM_NL             \
>         }                                                               \
>                                                                         \
>         /* Kernel symbol table: GPL-only symbols */                     \
>         __ksymtab_gpl     : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) {     \
> -               VMLINUX_SYMBOL(__start___ksymtab_gpl) = .;              \
> +               VMLINUX_SYMBOL(__start___ksymtab_gpl) = . ASM_NL        \
>                 *(SORT(___ksymtab_gpl+*))                               \
> -               VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .;               \
> +               VMLINUX_SYMBOL(__stop___ksymtab_gpl) = . ASM_NL         \
>         }                                                               \
>                                                                         \
>         /* Kernel symbol table: Normal unused symbols */                \
>         __ksymtab_unused  : AT(ADDR(__ksymtab_unused) - LOAD_OFFSET) {  \
> -               VMLINUX_SYMBOL(__start___ksymtab_unused) = .;           \
> +               VMLINUX_SYMBOL(__start___ksymtab_unused) = . ASM_NL     \
>                 *(SORT(___ksymtab_unused+*))                            \
> -               VMLINUX_SYMBOL(__stop___ksymtab_unused) = .;            \
> +               VMLINUX_SYMBOL(__stop___ksymtab_unused) = . ASM_NL      \
>         }                                                               \
>                                                                         \
>         /* Kernel symbol table: GPL-only unused symbols */              \
>         __ksymtab_unused_gpl : AT(ADDR(__ksymtab_unused_gpl) - LOAD_OFFSET) { \
> -               VMLINUX_SYMBOL(__start___ksymtab_unused_gpl) = .;       \
> +               VMLINUX_SYMBOL(__start___ksymtab_unused_gpl) = . ASM_NL \
>                 *(SORT(___ksymtab_unused_gpl+*))                        \
> -               VMLINUX_SYMBOL(__stop___ksymtab_unused_gpl) = .;        \
> +               VMLINUX_SYMBOL(__stop___ksymtab_unused_gpl) = . ASM_NL  \
>         }                                                               \
>                                                                         \
>         /* Kernel symbol table: GPL-future-only symbols */              \
>         __ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \
> -               VMLINUX_SYMBOL(__start___ksymtab_gpl_future) = .;       \
> +               VMLINUX_SYMBOL(__start___ksymtab_gpl_future) = . ASM_NL \
>                 *(SORT(___ksymtab_gpl_future+*))                        \
> -               VMLINUX_SYMBOL(__stop___ksymtab_gpl_future) = .;        \
> +               VMLINUX_SYMBOL(__stop___ksymtab_gpl_future) = . ASM_NL  \
>         }                                                               \
>                                                                         \
>         /* Kernel symbol table: Normal symbols */                       \
>         __kcrctab         : AT(ADDR(__kcrctab) - LOAD_OFFSET) {         \
> -               VMLINUX_SYMBOL(__start___kcrctab) = .;                  \
> +               VMLINUX_SYMBOL(__start___kcrctab) = . ASM_NL            \
>                 *(SORT(___kcrctab+*))                                   \
> -               VMLINUX_SYMBOL(__stop___kcrctab) = .;                   \
> +               VMLINUX_SYMBOL(__stop___kcrctab) = . ASM_NL             \
>         }                                                               \
>                                                                         \
>         /* Kernel symbol table: GPL-only symbols */                     \
>         __kcrctab_gpl     : AT(ADDR(__kcrctab_gpl) - LOAD_OFFSET) {     \
> -               VMLINUX_SYMBOL(__start___kcrctab_gpl) = .;              \
> +               VMLINUX_SYMBOL(__start___kcrctab_gpl) = . ASM_NL        \
>                 *(SORT(___kcrctab_gpl+*))                               \
> -               VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .;               \
> +               VMLINUX_SYMBOL(__stop___kcrctab_gpl) = . ASM_NL         \
>         }                                                               \
>                                                                         \
>         /* Kernel symbol table: Normal unused symbols */                \
>         __kcrctab_unused  : AT(ADDR(__kcrctab_unused) - LOAD_OFFSET) {  \
> -               VMLINUX_SYMBOL(__start___kcrctab_unused) = .;           \
> +               VMLINUX_SYMBOL(__start___kcrctab_unused) = . ASM_NL     \
>                 *(SORT(___kcrctab_unused+*))                            \
> -               VMLINUX_SYMBOL(__stop___kcrctab_unused) = .;            \
> +               VMLINUX_SYMBOL(__stop___kcrctab_unused) = . ASM_NL      \
>         }                                                               \
>                                                                         \
>         /* Kernel symbol table: GPL-only unused symbols */              \
>         __kcrctab_unused_gpl : AT(ADDR(__kcrctab_unused_gpl) - LOAD_OFFSET) { \
> -               VMLINUX_SYMBOL(__start___kcrctab_unused_gpl) = .;       \
> +               VMLINUX_SYMBOL(__start___kcrctab_unused_gpl) = . ASM_NL \
>                 *(SORT(___kcrctab_unused_gpl+*))                        \
> -               VMLINUX_SYMBOL(__stop___kcrctab_unused_gpl) = .;        \
> +               VMLINUX_SYMBOL(__stop___kcrctab_unused_gpl) = . ASM_NL  \
>         }                                                               \
>                                                                         \
>         /* Kernel symbol table: GPL-future-only symbols */              \
>         __kcrctab_gpl_future : AT(ADDR(__kcrctab_gpl_future) - LOAD_OFFSET) { \
> -               VMLINUX_SYMBOL(__start___kcrctab_gpl_future) = .;       \
> +               VMLINUX_SYMBOL(__start___kcrctab_gpl_future) = . ASM_NL \
>                 *(SORT(___kcrctab_gpl_future+*))                        \
> -               VMLINUX_SYMBOL(__stop___kcrctab_gpl_future) = .;        \
> +               VMLINUX_SYMBOL(__stop___kcrctab_gpl_future) = . ASM_NL  \
>         }                                                               \
>                                                                         \
>         /* Kernel symbol table: strings */                              \
> @@ -364,20 +366,20 @@
>                                                                         \
>         /* Built-in module parameters. */                               \
>         __param : AT(ADDR(__param) - LOAD_OFFSET) {                     \
> -               VMLINUX_SYMBOL(__start___param) = .;                    \
> +               VMLINUX_SYMBOL(__start___param) = . ASM_NL              \
>                 *(__param)                                              \
> -               VMLINUX_SYMBOL(__stop___param) = .;                     \
> +               VMLINUX_SYMBOL(__stop___param) = . ASM_NL               \
>         }                                                               \
>                                                                         \
>         /* Built-in module versions. */                                 \
>         __modver : AT(ADDR(__modver) - LOAD_OFFSET) {                   \
> -               VMLINUX_SYMBOL(__start___modver) = .;                   \
> +               VMLINUX_SYMBOL(__start___modver) = . ASM_NL             \
>                 *(__modver)                                             \
> -               VMLINUX_SYMBOL(__stop___modver) = .;                    \
> -               . = ALIGN((align));                                     \
> -               VMLINUX_SYMBOL(__end_rodata) = .;                       \
> +               VMLINUX_SYMBOL(__stop___modver) = . ASM_NL              \
> +               . = ALIGN((align)) ASM_NL                               \
> +               VMLINUX_SYMBOL(__end_rodata) = . ASM_NL                 \
>         }                                                               \
> -       . = ALIGN((align));
> +       . = ALIGN((align)) ASM_NL
>
>  /* RODATA & RO_DATA provided for backward compatibility.
>   * All archs are supposed to use RO_DATA() */
> @@ -386,15 +388,15 @@
>
>  #define SECURITY_INIT                                                  \
>         .security_initcall.init : AT(ADDR(.security_initcall.init) - LOAD_OFFSET) { \
> -               VMLINUX_SYMBOL(__security_initcall_start) = .;          \
> +               VMLINUX_SYMBOL(__security_initcall_start) = . ASM_NL    \
>                 *(.security_initcall.init)                              \
> -               VMLINUX_SYMBOL(__security_initcall_end) = .;            \
> +               VMLINUX_SYMBOL(__security_initcall_end) = . ASM_NL      \
>         }
>
>  /* .text section. Map to function alignment to avoid address changes
>   * during second ld run in second ld pass when generating System.map */
>  #define TEXT_TEXT                                                      \
> -               ALIGN_FUNCTION();                                       \
> +               ALIGN_FUNCTION() ASM_NL                                 \
>                 *(.text.hot)                                            \
>                 *(.text)                                                \
>                 *(.ref.text)                                            \
> @@ -406,37 +408,37 @@
>  /* sched.text is aling to function alignment to secure we have same
>   * address even at second ld pass when generating System.map */
>  #define SCHED_TEXT                                                     \
> -               ALIGN_FUNCTION();                                       \
> -               VMLINUX_SYMBOL(__sched_text_start) = .;                 \
> +               ALIGN_FUNCTION() ASM_NL                                 \
> +               VMLINUX_SYMBOL(__sched_text_start) = . ASM_NL           \
>                 *(.sched.text)                                          \
> -               VMLINUX_SYMBOL(__sched_text_end) = .;
> +               VMLINUX_SYMBOL(__sched_text_end) = . ASM_NL
>
>  /* spinlock.text is aling to function alignment to secure we have same
>   * address even at second ld pass when generating System.map */
>  #define LOCK_TEXT                                                      \
> -               ALIGN_FUNCTION();                                       \
> -               VMLINUX_SYMBOL(__lock_text_start) = .;                  \
> +               ALIGN_FUNCTION() ASM_NL                                 \
> +               VMLINUX_SYMBOL(__lock_text_start) = . ASM_NL            \
>                 *(.spinlock.text)                                       \
> -               VMLINUX_SYMBOL(__lock_text_end) = .;
> +               VMLINUX_SYMBOL(__lock_text_end) = . ASM_NL
>
>  #define KPROBES_TEXT                                                   \
> -               ALIGN_FUNCTION();                                       \
> -               VMLINUX_SYMBOL(__kprobes_text_start) = .;               \
> +               ALIGN_FUNCTION() ASM_NL                                 \
> +               VMLINUX_SYMBOL(__kprobes_text_start) = . ASM_NL         \
>                 *(.kprobes.text)                                        \
> -               VMLINUX_SYMBOL(__kprobes_text_end) = .;
> +               VMLINUX_SYMBOL(__kprobes_text_end) = . ASM_NL
>
>  #define ENTRY_TEXT                                                     \
> -               ALIGN_FUNCTION();                                       \
> -               VMLINUX_SYMBOL(__entry_text_start) = .;                 \
> +               ALIGN_FUNCTION() ASM_NL                                 \
> +               VMLINUX_SYMBOL(__entry_text_start) = . ASM_NL           \
>                 *(.entry.text)                                          \
> -               VMLINUX_SYMBOL(__entry_text_end) = .;
> +               VMLINUX_SYMBOL(__entry_text_end) = . ASM_NL
>
>  #ifdef CONFIG_FUNCTION_GRAPH_TRACER
>  #define IRQENTRY_TEXT                                                  \
> -               ALIGN_FUNCTION();                                       \
> -               VMLINUX_SYMBOL(__irqentry_text_start) = .;              \
> +               ALIGN_FUNCTION() ASM_NL                                 \
> +               VMLINUX_SYMBOL(__irqentry_text_start) = . ASM_NL        \
>                 *(.irqentry.text)                                       \
> -               VMLINUX_SYMBOL(__irqentry_text_end) = .;
> +               VMLINUX_SYMBOL(__irqentry_text_end) = . ASM_NL
>  #else
>  #define IRQENTRY_TEXT
>  #endif
> @@ -444,7 +446,7 @@
>  /* Section used for early init (in .S files) */
>  #define HEAD_TEXT  *(.head.text)
>
> -#define HEAD_TEXT_SECTION                                                      \
> +#define HEAD_TEXT_SECTION                                              \
>         .head.text : AT(ADDR(.head.text) - LOAD_OFFSET) {               \
>                 HEAD_TEXT                                               \
>         }
> @@ -453,28 +455,28 @@
>   * Exception table
>   */
>  #define EXCEPTION_TABLE(align)                                         \
> -       . = ALIGN(align);                                               \
> +       . = ALIGN(align) ASM_NL                                         \
>         __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {               \
> -               VMLINUX_SYMBOL(__start___ex_table) = .;                 \
> +               VMLINUX_SYMBOL(__start___ex_table) = . ASM_NL           \
>                 *(__ex_table)                                           \
> -               VMLINUX_SYMBOL(__stop___ex_table) = .;                  \
> +               VMLINUX_SYMBOL(__stop___ex_table) = . ASM_NL            \
>         }
>
>  /*
>   * Init task
>   */
>  #define INIT_TASK_DATA_SECTION(align)                                  \
> -       . = ALIGN(align);                                               \
> +       . = ALIGN(align) ASM_NL                                         \
>         .data..init_task :  AT(ADDR(.data..init_task) - LOAD_OFFSET) {  \
>                 INIT_TASK_DATA(align)                                   \
>         }
>
>  #ifdef CONFIG_CONSTRUCTORS
> -#define KERNEL_CTORS() . = ALIGN(8);                      \
> -                       VMLINUX_SYMBOL(__ctors_start) = .; \
> -                       *(.ctors)                          \
> -                       *(.init_array)                     \
> -                       VMLINUX_SYMBOL(__ctors_end) = .;
> +#define KERNEL_CTORS() . = ALIGN(8) ASM_NL                        \
> +                       VMLINUX_SYMBOL(__ctors_start) = . ASM_NL   \
> +                       *(.ctors)                                  \
> +                       *(.init_array)                             \
> +                       VMLINUX_SYMBOL(__ctors_end) = . ASM_NL
>  #else
>  #define KERNEL_CTORS()
>  #endif
> @@ -515,7 +517,7 @@
>   * zeroed during startup
>   */
>  #define SBSS(sbss_align)                                               \
> -       . = ALIGN(sbss_align);                                          \
> +       . = ALIGN(sbss_align) ASM_NL                                    \
>         .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) {                         \
>                 *(.sbss)                                                \
>                 *(.scommon)                                             \
> @@ -530,7 +532,7 @@
>  #endif
>
>  #define BSS(bss_align)                                                 \
> -       . = ALIGN(bss_align);                                           \
> +       . = ALIGN(bss_align) ASM_NL                                     \
>         .bss : AT(ADDR(.bss) - LOAD_OFFSET) {                           \
>                 BSS_FIRST_SECTIONS                                      \
>                 *(.bss..page_aligned)                                   \
> @@ -581,11 +583,11 @@
>
>  #ifdef CONFIG_GENERIC_BUG
>  #define BUG_TABLE                                                      \
> -       . = ALIGN(8);                                                   \
> +       . = ALIGN(8) ASM_NL                                             \
>         __bug_table : AT(ADDR(__bug_table) - LOAD_OFFSET) {             \
> -               VMLINUX_SYMBOL(__start___bug_table) = .;                \
> +               VMLINUX_SYMBOL(__start___bug_table) = . ASM_NL          \
>                 *(__bug_table)                                          \
> -               VMLINUX_SYMBOL(__stop___bug_table) = .;                 \
> +               VMLINUX_SYMBOL(__stop___bug_table) = . ASM_NL           \
>         }
>  #else
>  #define BUG_TABLE
> @@ -593,11 +595,11 @@
>
>  #ifdef CONFIG_PM_TRACE
>  #define TRACEDATA                                                      \
> -       . = ALIGN(4);                                                   \
> +       . = ALIGN(4) ASM_NL                                             \
>         .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) {               \
> -               VMLINUX_SYMBOL(__tracedata_start) = .;                  \
> +               VMLINUX_SYMBOL(__tracedata_start) = . ASM_NL            \
>                 *(.tracedata)                                           \
> -               VMLINUX_SYMBOL(__tracedata_end) = .;                    \
> +               VMLINUX_SYMBOL(__tracedata_end) = . ASM_NL              \
>         }
>  #else
>  #define TRACEDATA
> @@ -605,24 +607,24 @@
>
>  #define NOTES                                                          \
>         .notes : AT(ADDR(.notes) - LOAD_OFFSET) {                       \
> -               VMLINUX_SYMBOL(__start_notes) = .;                      \
> +               VMLINUX_SYMBOL(__start_notes) = . ASM_NL                \
>                 *(.note.*)                                              \
> -               VMLINUX_SYMBOL(__stop_notes) = .;                       \
> +               VMLINUX_SYMBOL(__stop_notes) = . ASM_NL                 \
>         }
>
>  #define INIT_SETUP(initsetup_align)                                    \
> -               . = ALIGN(initsetup_align);                             \
> -               VMLINUX_SYMBOL(__setup_start) = .;                      \
> +               . = ALIGN(initsetup_align) ASM_NL                       \
> +               VMLINUX_SYMBOL(__setup_start) = . ASM_NL                \
>                 *(.init.setup)                                          \
> -               VMLINUX_SYMBOL(__setup_end) = .;
> +               VMLINUX_SYMBOL(__setup_end) = . ASM_NL
>
>  #define INIT_CALLS_LEVEL(level)                                                \
> -               VMLINUX_SYMBOL(__initcall##level##_start) = .;          \
> +               VMLINUX_SYMBOL(__initcall##level##_start) = . ASM_NL    \
>                 *(.initcall##level##.init)                              \
>                 *(.initcall##level##s.init)                             \
>
>  #define INIT_CALLS                                                     \
> -               VMLINUX_SYMBOL(__initcall_start) = .;                   \
> +               VMLINUX_SYMBOL(__initcall_start) = . ASM_NL             \
>                 *(.initcallearly.init)                                  \
>                 INIT_CALLS_LEVEL(0)                                     \
>                 INIT_CALLS_LEVEL(1)                                     \
> @@ -633,24 +635,24 @@
>                 INIT_CALLS_LEVEL(rootfs)                                \
>                 INIT_CALLS_LEVEL(6)                                     \
>                 INIT_CALLS_LEVEL(7)                                     \
> -               VMLINUX_SYMBOL(__initcall_end) = .;
> +               VMLINUX_SYMBOL(__initcall_end) = . ASM_NL
>
>  #define CON_INITCALL                                                   \
> -               VMLINUX_SYMBOL(__con_initcall_start) = .;               \
> +               VMLINUX_SYMBOL(__con_initcall_start) = . ASM_NL         \
>                 *(.con_initcall.init)                                   \
> -               VMLINUX_SYMBOL(__con_initcall_end) = .;
> +               VMLINUX_SYMBOL(__con_initcall_end) = . ASM_NL
>
>  #define SECURITY_INITCALL                                              \
> -               VMLINUX_SYMBOL(__security_initcall_start) = .;          \
> +               VMLINUX_SYMBOL(__security_initcall_start) = . ASM_NL    \
>                 *(.security_initcall.init)                              \
> -               VMLINUX_SYMBOL(__security_initcall_end) = .;
> +               VMLINUX_SYMBOL(__security_initcall_end) = . ASM_NL
>
>  #ifdef CONFIG_BLK_DEV_INITRD
>  #define INIT_RAM_FS                                                    \
> -       . = ALIGN(4);                                                   \
> -       VMLINUX_SYMBOL(__initramfs_start) = .;                          \
> +       . = ALIGN(4) ASM_NL                                             \
> +       VMLINUX_SYMBOL(__initramfs_start) = . ASM_NL                    \
>         *(.init.ramfs)                                                  \
> -       . = ALIGN(8);                                                   \
> +       . = ALIGN(8) ASM_NL                                             \
>         *(.init.ramfs.info)
>  #else
>  #define INIT_RAM_FS
> @@ -685,16 +687,16 @@
>   * sharing between subsections for different purposes.
>   */
>  #define PERCPU_INPUT(cacheline)                                                \
> -       VMLINUX_SYMBOL(__per_cpu_start) = .;                            \
> +       VMLINUX_SYMBOL(__per_cpu_start) = . ASM_NL                      \
>         *(.data..percpu..first)                                         \
> -       . = ALIGN(PAGE_SIZE);                                           \
> +       . = ALIGN(PAGE_SIZE) ASM_NL                                     \
>         *(.data..percpu..page_aligned)                                  \
> -       . = ALIGN(cacheline);                                           \
> +       . = ALIGN(cacheline) ASM_NL                                     \
>         *(.data..percpu..readmostly)                                    \
> -       . = ALIGN(cacheline);                                           \
> +       . = ALIGN(cacheline) ASM_NL                                     \
>         *(.data..percpu)                                                \
>         *(.data..percpu..shared_aligned)                                \
> -       VMLINUX_SYMBOL(__per_cpu_end) = .;
> +       VMLINUX_SYMBOL(__per_cpu_end) = . ASM_NL
>
>  /**
>   * PERCPU_VADDR - define output section for percpu area
> @@ -721,12 +723,12 @@
>   * address, use PERCPU_SECTION.
>   */
>  #define PERCPU_VADDR(cacheline, vaddr, phdr)                           \
> -       VMLINUX_SYMBOL(__per_cpu_load) = .;                             \
> +       VMLINUX_SYMBOL(__per_cpu_load) = . ASM_NL                       \
>         .data..percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load)         \
>                                 - LOAD_OFFSET) {                        \
>                 PERCPU_INPUT(cacheline)                                 \
>         } phdr                                                          \
> -       . = VMLINUX_SYMBOL(__per_cpu_load) + SIZEOF(.data..percpu);
> +       . = VMLINUX_SYMBOL(__per_cpu_load) + SIZEOF(.data..percpu) ASM_NL
>
>  /**
>   * PERCPU_SECTION - define output section for percpu area, simple version
> @@ -741,9 +743,9 @@
>   * .data..percpu which is required for relocatable x86_32 configuration.
>   */
>  #define PERCPU_SECTION(cacheline)                                      \
> -       . = ALIGN(PAGE_SIZE);                                           \
> +       . = ALIGN(PAGE_SIZE) ASM_NL                                     \
>         .data..percpu   : AT(ADDR(.data..percpu) - LOAD_OFFSET) {       \
> -               VMLINUX_SYMBOL(__per_cpu_load) = .;                     \
> +               VMLINUX_SYMBOL(__per_cpu_load) = . ASM_NL               \
>                 PERCPU_INPUT(cacheline)                                 \
>         }
>
> @@ -767,7 +769,7 @@
>   *
>   * use 0 as page_align if page_aligned data is not used */
>  #define RW_DATA_SECTION(cacheline, pagealigned, inittask)              \
> -       . = ALIGN(PAGE_SIZE);                                           \
> +       . = ALIGN(PAGE_SIZE) ASM_NL                                     \
>         .data : AT(ADDR(.data) - LOAD_OFFSET) {                         \
>                 INIT_TASK_DATA(inittask)                                \
>                 NOSAVE_DATA                                             \
> @@ -779,11 +781,11 @@
>         }
>
>  #define INIT_TEXT_SECTION(inittext_align)                              \
> -       . = ALIGN(inittext_align);                                      \
> +       . = ALIGN(inittext_align) ASM_NL                                \
>         .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {               \
> -               VMLINUX_SYMBOL(_sinittext) = .;                         \
> +               VMLINUX_SYMBOL(_sinittext) = . ASM_NL                   \
>                 INIT_TEXT                                               \
> -               VMLINUX_SYMBOL(_einittext) = .;                         \
> +               VMLINUX_SYMBOL(_einittext) = . ASM_NL                   \
>         }
>
>  #define INIT_DATA_SECTION(initsetup_align)                             \
> @@ -797,9 +799,9 @@
>         }
>
>  #define BSS_SECTION(sbss_align, bss_align, stop_align)                 \
> -       . = ALIGN(sbss_align);                                          \
> -       VMLINUX_SYMBOL(__bss_start) = .;                                \
> +       . = ALIGN(sbss_align) ASM_NL                                    \
> +       VMLINUX_SYMBOL(__bss_start) = . ASM_NL                          \
>         SBSS(sbss_align)                                                \
>         BSS(bss_align)                                                  \
> -       . = ALIGN(stop_align);                                          \
> -       VMLINUX_SYMBOL(__bss_stop) = .;
> +       . = ALIGN(stop_align) ASM_NL                                    \
> +       VMLINUX_SYMBOL(__bss_stop) = . ASM_NL
> diff --git a/include/linux/linkage.h b/include/linux/linkage.h
> index d3e8ad2..a6a42dd 100644
> --- a/include/linux/linkage.h
> +++ b/include/linux/linkage.h
> @@ -6,6 +6,11 @@
>  #include <linux/export.h>
>  #include <asm/linkage.h>
>
> +/* Some toolchains use other characters (e.g. '`') to mark new line in macro */
> +#ifndef ASM_NL
> +#define ASM_NL          ;
> +#endif
> +
>  #ifdef __cplusplus
>  #define CPP_ASMLINKAGE extern "C"
>  #else
> @@ -75,21 +80,21 @@
>
>  #ifndef ENTRY
>  #define ENTRY(name) \
> -  .globl name; \
> -  ALIGN; \
> -  name:
> +       .globl name ASM_NL \
> +       ALIGN ASM_NL \
> +       name:
>  #endif
>  #endif /* LINKER_SCRIPT */
>
>  #ifndef WEAK
>  #define WEAK(name)        \
> -       .weak name;        \
> +       .weak name ASM_NL   \
>         name:
>  #endif
>
>  #ifndef END
>  #define END(name) \
> -  .size name, .-name
> +       .size name, .-name
>  #endif
>
>  /* If symbol 'name' is treated as a subroutine (gets called, and returns)
> @@ -98,8 +103,8 @@
>   */
>  #ifndef ENDPROC
>  #define ENDPROC(name) \
> -  .type name, @function; \
> -  END(name)
> +       .type name, @function ASM_NL \
> +       END(name)
>  #endif
>
>  #endif
> --
> 1.7.7.6
> --
> To unsubscribe from this list: send the line "unsubscribe linux-arch" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Thanks.
-- Max
--
To unsubscribe from this list: send the line "unsubscribe linux-arch" 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]     [Kernel Newbies]     [x86 Platform Driver]     [Netdev]     [Linux Wireless]     [Netfilter]     [Bugtraq]     [Linux Filesystems]     [Yosemite Discussion]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]

  Powered by Linux