ARM64: config: enable DRM relevant config
[firefly-linux-kernel-4.4.55.git] / include / asm-generic / pie.lds.h
1 /*
2  * Helper macros to support writing architecture specific
3  * pie linker scripts.
4  *
5  * A minimal linker scripts has following content:
6  * [This is a sample, architectures may have special requiriements]
7  *
8  * OUTPUT_FORMAT(...)
9  * OUTPUT_ARCH(...)
10  * SECTIONS
11  * {
12  *      . = 0x0;
13  *
14  *      PIE_COMMON_START
15  *      .text {
16  *              PIE_TEXT_TEXT
17  *      }
18  *      PIE_COMMON_END
19  *
20  *      PIE_OVERLAY_START
21  *      OVERLAY : NOCROSSREFS {
22  *              PIE_OVERLAY_SECTION(am33xx)
23  *              PIE_OVERLAY_SECTION(am347x)
24  *              [...]
25  *      }
26  *      PIE_OVERLAY_END
27  *
28  *      PIE_DISCARDS            // must be the last
29  * }
30  */
31
32 #include <asm-generic/vmlinux.lds.h>
33
34 #define PIE_COMMON_START                                                \
35         __pie_common_start : {                                          \
36                 VMLINUX_SYMBOL(__pie_common_start) = .;                 \
37         }
38
39 #define PIE_COMMON_END                                                  \
40         __pie_common_end : {                                            \
41                 VMLINUX_SYMBOL(__pie_common_end) = .;                   \
42         }
43
44 #define PIE_OVERLAY_START                                               \
45         __pie_overlay_start : {                                         \
46                 VMLINUX_SYMBOL(__pie_overlay_start) = .;                \
47         }
48
49 #define PIE_OVERLAY_END                                                 \
50         __pie_overlay_end : {                                           \
51                 VMLINUX_SYMBOL(__pie_overlay_end) = .;                  \
52         }
53
54 #define PIE_TEXT_TEXT                                                   \
55         KEEP(*(.pie.text))
56
57 #define PIE_OVERLAY_SECTION(name)                                       \
58         .pie.##name {                                                   \
59                 KEEP(*(.pie.##name##.*))                                \
60                 VMLINUX_SYMBOL(__pie_##name##_start) =                  \
61                                 LOADADDR(.pie.##name##);                \
62                 VMLINUX_SYMBOL(__pie_##name##_end) =                    \
63                                 LOADADDR(.pie.##name##) +               \
64                                 SIZEOF(.pie.##name##);                  \
65         }                                                               \
66         .rel.##name {                                                   \
67                 KEEP(*(.rel.pie.##name##.*))                            \
68                 VMLINUX_SYMBOL(__pie_rel_##name##_start) =              \
69                                 LOADADDR(.rel.##name##);                \
70                 VMLINUX_SYMBOL(__pie_rel_##name##_end) =                \
71                                 LOADADDR(.rel.##name##) +               \
72                                 SIZEOF(.rel.##name##);                  \
73         }
74
75 #define PIE_DISCARDS                                                    \
76         /DISCARD/ : {                                                   \
77         *(.dynsym)                                                      \
78         *(.dynstr*)                                                     \
79         *(.dynamic*)                                                    \
80         *(.plt*)                                                        \
81         *(.interp*)                                                     \
82         *(.gnu*)                                                        \
83         *(.hash)                                                        \
84         *(.comment)                                                     \
85         *(.bss*)                                                        \
86         *(.data)                                                        \
87         *(.discard)                                                     \
88         *(.discard.*)                                                   \
89         }
90