1*4882a593SmuzhiyunFrom 76946dd67bc856eaf4fe69d0826547a794176f78 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Sylvain Gault <sylvain.gault@gmail.com> 3*4882a593SmuzhiyunDate: Tue, 29 Sep 2015 04:45:09 +0200 4*4882a593SmuzhiyunSubject: [PATCH] bios: Don't try to guess the sections alignment 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunFor the compression / decompression to succeed, the sections layout must 7*4882a593Smuzhiyunbe the same between the virtual memory and load memory. The section 8*4882a593Smuzhiyunalignment was kept in sync by introducing aligment that should be 9*4882a593Smuzhiyungreater or equal to the actual section alignment. 10*4882a593Smuzhiyun 11*4882a593SmuzhiyunThis patch compute the load memory addresses of the sections so that 12*4882a593Smuzhiyunthe layout is the same as the virtual memory addresses. 13*4882a593Smuzhiyun 14*4882a593SmuzhiyunSigned-off-by: Sylvain Gault <sylvain.gault@gmail.com> 15*4882a593SmuzhiyunTested-by: poma <pomidorabelisima@gmail.com> 16*4882a593SmuzhiyunSigned-off-by: Paulo Alcantara <pcacjr@zytor.com> 17*4882a593Smuzhiyun 18*4882a593SmuzhiyunUpstream: 0cc9a99e560a2f52bcf052fd85b1efae35ee812f 19*4882a593SmuzhiyunSigned-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> 20*4882a593Smuzhiyun--- 21*4882a593Smuzhiyun core/i386/syslinux.ld | 63 ++++++++++--------------------------------------- 22*4882a593Smuzhiyun core/x86_64/syslinux.ld | 63 ++++++++++--------------------------------------- 23*4882a593Smuzhiyun 2 files changed, 24 insertions(+), 102 deletions(-) 24*4882a593Smuzhiyun 25*4882a593Smuzhiyundiff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld 26*4882a593Smuzhiyunindex 73904510..92b75b11 100644 27*4882a593Smuzhiyun--- a/core/i386/syslinux.ld 28*4882a593Smuzhiyun+++ b/core/i386/syslinux.ld 29*4882a593Smuzhiyun@@ -255,10 +255,9 @@ SECTIONS 30*4882a593Smuzhiyun . = 0x100000; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun __pm_code_start = .; 33*4882a593Smuzhiyun+ __vma_to_lma = __pm_code_lma - __pm_code_start; 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun- __text_vma = .; 36*4882a593Smuzhiyun- __text_lma = __pm_code_lma; 37*4882a593Smuzhiyun- .text : AT(__text_lma) { 38*4882a593Smuzhiyun+ .text : AT(ADDR(.text) + __vma_to_lma) { 39*4882a593Smuzhiyun FILL(0x90909090) 40*4882a593Smuzhiyun __text_start = .; 41*4882a593Smuzhiyun *(.text) 42*4882a593Smuzhiyun@@ -266,106 +265,68 @@ SECTIONS 43*4882a593Smuzhiyun __text_end = .; 44*4882a593Smuzhiyun } 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun- . = ALIGN(32); 47*4882a593Smuzhiyun- 48*4882a593Smuzhiyun- __rodata_vma = .; 49*4882a593Smuzhiyun- __rodata_lma = __rodata_vma + __text_lma - __text_vma; 50*4882a593Smuzhiyun- .rodata : AT(__rodata_lma) { 51*4882a593Smuzhiyun+ .rodata : AT(ADDR(.rodata) + __vma_to_lma) { 52*4882a593Smuzhiyun __rodata_start = .; 53*4882a593Smuzhiyun *(.rodata) 54*4882a593Smuzhiyun *(.rodata.*) 55*4882a593Smuzhiyun __rodata_end = .; 56*4882a593Smuzhiyun } 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun- . = ALIGN(4); 59*4882a593Smuzhiyun- 60*4882a593Smuzhiyun- __ctors_vma = .; 61*4882a593Smuzhiyun- __ctors_lma = __ctors_vma + __text_lma - __text_vma; 62*4882a593Smuzhiyun- .ctors : AT(__ctors_lma) { 63*4882a593Smuzhiyun+ .ctors : AT(ADDR(.ctors) + __vma_to_lma) { 64*4882a593Smuzhiyun __ctors_start = .; 65*4882a593Smuzhiyun KEEP (*(SORT(.ctors.*))) 66*4882a593Smuzhiyun KEEP (*(.ctors)) 67*4882a593Smuzhiyun __ctors_end = .; 68*4882a593Smuzhiyun } 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun- __dtors_vma = .; 71*4882a593Smuzhiyun- __dtors_lma = __dtors_vma + __text_lma - __text_vma; 72*4882a593Smuzhiyun- .dtors : AT(__dtors_lma) { 73*4882a593Smuzhiyun+ .dtors : AT(ADDR(.dtors) + __vma_to_lma) { 74*4882a593Smuzhiyun __dtors_start = .; 75*4882a593Smuzhiyun KEEP (*(SORT(.dtors.*))) 76*4882a593Smuzhiyun KEEP (*(.dtors)) 77*4882a593Smuzhiyun __dtors_end = .; 78*4882a593Smuzhiyun } 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun- . = ALIGN(4); 81*4882a593Smuzhiyun- 82*4882a593Smuzhiyun- __dynsym_vma = .; 83*4882a593Smuzhiyun- __dynsym_lma = __dynsym_vma + __text_lma - __text_vma; 84*4882a593Smuzhiyun- .dynsym : AT(__dynsym_lma) { 85*4882a593Smuzhiyun+ .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) { 86*4882a593Smuzhiyun __dynsym_start = .; 87*4882a593Smuzhiyun *(.dynsym) 88*4882a593Smuzhiyun __dynsym_end = .; 89*4882a593Smuzhiyun } 90*4882a593Smuzhiyun __dynsym_len = __dynsym_end - __dynsym_start; 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun- . = ALIGN(4); 93*4882a593Smuzhiyun- 94*4882a593Smuzhiyun- __dynstr_vma = .; 95*4882a593Smuzhiyun- __dynstr_lma = __dynstr_vma + __text_lma - __text_vma; 96*4882a593Smuzhiyun- .dynstr : AT(__dynstr_lma) { 97*4882a593Smuzhiyun+ .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) { 98*4882a593Smuzhiyun __dynstr_start = .; 99*4882a593Smuzhiyun *(.dynstr) 100*4882a593Smuzhiyun __dynstr_end = .; 101*4882a593Smuzhiyun } 102*4882a593Smuzhiyun __dynstr_len = __dynstr_end - __dynstr_start; 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun- . = ALIGN(4); 105*4882a593Smuzhiyun- 106*4882a593Smuzhiyun- __gnu_hash_vma = .; 107*4882a593Smuzhiyun- __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma; 108*4882a593Smuzhiyun- .gnu.hash : AT(__gnu_hash_lma) { 109*4882a593Smuzhiyun+ .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) { 110*4882a593Smuzhiyun __gnu_hash_start = .; 111*4882a593Smuzhiyun *(.gnu.hash) 112*4882a593Smuzhiyun __gnu_hash_end = .; 113*4882a593Smuzhiyun } 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun- . = ALIGN(4); 117*4882a593Smuzhiyun- 118*4882a593Smuzhiyun- __dynlink_vma = .; 119*4882a593Smuzhiyun- __dynlink_lma = __dynlink_vma + __text_lma - __text_vma; 120*4882a593Smuzhiyun- .dynlink : AT(__dynlink_lma) { 121*4882a593Smuzhiyun+ .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) { 122*4882a593Smuzhiyun __dynlink_start = .; 123*4882a593Smuzhiyun *(.dynlink) 124*4882a593Smuzhiyun __dynlink_end = .; 125*4882a593Smuzhiyun } 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun- . = ALIGN(4); 128*4882a593Smuzhiyun- 129*4882a593Smuzhiyun- __got_vma = .; 130*4882a593Smuzhiyun- __got_lma = __got_vma + __text_lma - __text_vma; 131*4882a593Smuzhiyun- .got : AT(__got_lma) { 132*4882a593Smuzhiyun+ .got : AT(ADDR(.got) + __vma_to_lma) { 133*4882a593Smuzhiyun __got_start = .; 134*4882a593Smuzhiyun KEEP (*(.got.plt)) 135*4882a593Smuzhiyun KEEP (*(.got)) 136*4882a593Smuzhiyun __got_end = .; 137*4882a593Smuzhiyun } 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun- . = ALIGN(4); 140*4882a593Smuzhiyun- 141*4882a593Smuzhiyun- __dynamic_vma = .; 142*4882a593Smuzhiyun- __dynamic_lma = __dynamic_vma + __text_lma - __text_vma; 143*4882a593Smuzhiyun- .dynamic : AT(__dynamic_lma) { 144*4882a593Smuzhiyun+ .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) { 145*4882a593Smuzhiyun __dynamic_start = .; 146*4882a593Smuzhiyun *(.dynamic) 147*4882a593Smuzhiyun __dynamic_end = .; 148*4882a593Smuzhiyun } 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun- . = ALIGN(32); 151*4882a593Smuzhiyun- 152*4882a593Smuzhiyun- __data_vma = .; 153*4882a593Smuzhiyun- __data_lma = __data_vma + __text_lma - __text_vma; 154*4882a593Smuzhiyun- .data : AT(__data_lma) { 155*4882a593Smuzhiyun+ .data : AT(ADDR(.data) + __vma_to_lma) { 156*4882a593Smuzhiyun __data_start = .; 157*4882a593Smuzhiyun *(.data) 158*4882a593Smuzhiyun *(.data.*) 159*4882a593Smuzhiyundiff --git a/core/x86_64/syslinux.ld b/core/x86_64/syslinux.ld 160*4882a593Smuzhiyunindex bf815c46..70c6e00a 100644 161*4882a593Smuzhiyun--- a/core/x86_64/syslinux.ld 162*4882a593Smuzhiyun+++ b/core/x86_64/syslinux.ld 163*4882a593Smuzhiyun@@ -255,10 +255,9 @@ SECTIONS 164*4882a593Smuzhiyun . = 0x100000; 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun __pm_code_start = .; 167*4882a593Smuzhiyun+ __vma_to_lma = __pm_code_lma - __pm_code_start; 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun- __text_vma = .; 170*4882a593Smuzhiyun- __text_lma = __pm_code_lma; 171*4882a593Smuzhiyun- .text : AT(__text_lma) { 172*4882a593Smuzhiyun+ .text : AT(ADDR(.text) + __vma_to_lma) { 173*4882a593Smuzhiyun FILL(0x90909090) 174*4882a593Smuzhiyun __text_start = .; 175*4882a593Smuzhiyun *(.text) 176*4882a593Smuzhiyun@@ -266,106 +265,68 @@ SECTIONS 177*4882a593Smuzhiyun __text_end = .; 178*4882a593Smuzhiyun } 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun- . = ALIGN(32); 181*4882a593Smuzhiyun- 182*4882a593Smuzhiyun- __rodata_vma = .; 183*4882a593Smuzhiyun- __rodata_lma = __rodata_vma + __text_lma - __text_vma; 184*4882a593Smuzhiyun- .rodata : AT(__rodata_lma) { 185*4882a593Smuzhiyun+ .rodata : AT(ADDR(.rodata) + __vma_to_lma) { 186*4882a593Smuzhiyun __rodata_start = .; 187*4882a593Smuzhiyun *(.rodata) 188*4882a593Smuzhiyun *(.rodata.*) 189*4882a593Smuzhiyun __rodata_end = .; 190*4882a593Smuzhiyun } 191*4882a593Smuzhiyun 192*4882a593Smuzhiyun- . = ALIGN(4); 193*4882a593Smuzhiyun- 194*4882a593Smuzhiyun- __ctors_vma = .; 195*4882a593Smuzhiyun- __ctors_lma = __ctors_vma + __text_lma - __text_vma; 196*4882a593Smuzhiyun- .ctors : AT(__ctors_lma) { 197*4882a593Smuzhiyun+ .ctors : AT(ADDR(.ctors) + __vma_to_lma) { 198*4882a593Smuzhiyun __ctors_start = .; 199*4882a593Smuzhiyun KEEP (*(SORT(.ctors.*))) 200*4882a593Smuzhiyun KEEP (*(.ctors)) 201*4882a593Smuzhiyun __ctors_end = .; 202*4882a593Smuzhiyun } 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun- __dtors_vma = .; 205*4882a593Smuzhiyun- __dtors_lma = __dtors_vma + __text_lma - __text_vma; 206*4882a593Smuzhiyun- .dtors : AT(__dtors_lma) { 207*4882a593Smuzhiyun+ .dtors : AT(ADDR(.dtors) + __vma_to_lma) { 208*4882a593Smuzhiyun __dtors_start = .; 209*4882a593Smuzhiyun KEEP (*(SORT(.dtors.*))) 210*4882a593Smuzhiyun KEEP (*(.dtors)) 211*4882a593Smuzhiyun __dtors_end = .; 212*4882a593Smuzhiyun } 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun- . = ALIGN(4); 215*4882a593Smuzhiyun- 216*4882a593Smuzhiyun- __dynsym_vma = .; 217*4882a593Smuzhiyun- __dynsym_lma = __dynsym_vma + __text_lma - __text_vma; 218*4882a593Smuzhiyun- .dynsym : AT(__dynsym_lma) { 219*4882a593Smuzhiyun+ .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) { 220*4882a593Smuzhiyun __dynsym_start = .; 221*4882a593Smuzhiyun *(.dynsym) 222*4882a593Smuzhiyun __dynsym_end = .; 223*4882a593Smuzhiyun } 224*4882a593Smuzhiyun __dynsym_len = __dynsym_end - __dynsym_start; 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun- . = ALIGN(4); 227*4882a593Smuzhiyun- 228*4882a593Smuzhiyun- __dynstr_vma = .; 229*4882a593Smuzhiyun- __dynstr_lma = __dynstr_vma + __text_lma - __text_vma; 230*4882a593Smuzhiyun- .dynstr : AT(__dynstr_lma) { 231*4882a593Smuzhiyun+ .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) { 232*4882a593Smuzhiyun __dynstr_start = .; 233*4882a593Smuzhiyun *(.dynstr) 234*4882a593Smuzhiyun __dynstr_end = .; 235*4882a593Smuzhiyun } 236*4882a593Smuzhiyun __dynstr_len = __dynstr_end - __dynstr_start; 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun- . = ALIGN(4); 239*4882a593Smuzhiyun- 240*4882a593Smuzhiyun- __gnu_hash_vma = .; 241*4882a593Smuzhiyun- __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma; 242*4882a593Smuzhiyun- .gnu.hash : AT(__gnu_hash_lma) { 243*4882a593Smuzhiyun+ .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) { 244*4882a593Smuzhiyun __gnu_hash_start = .; 245*4882a593Smuzhiyun *(.gnu.hash) 246*4882a593Smuzhiyun __gnu_hash_end = .; 247*4882a593Smuzhiyun } 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun- . = ALIGN(4); 251*4882a593Smuzhiyun- 252*4882a593Smuzhiyun- __dynlink_vma = .; 253*4882a593Smuzhiyun- __dynlink_lma = __dynlink_vma + __text_lma - __text_vma; 254*4882a593Smuzhiyun- .dynlink : AT(__dynlink_lma) { 255*4882a593Smuzhiyun+ .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) { 256*4882a593Smuzhiyun __dynlink_start = .; 257*4882a593Smuzhiyun *(.dynlink) 258*4882a593Smuzhiyun __dynlink_end = .; 259*4882a593Smuzhiyun } 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun- . = ALIGN(4); 262*4882a593Smuzhiyun- 263*4882a593Smuzhiyun- __got_vma = .; 264*4882a593Smuzhiyun- __got_lma = __got_vma + __text_lma - __text_vma; 265*4882a593Smuzhiyun- .got : AT(__got_lma) { 266*4882a593Smuzhiyun+ .got : AT(ADDR(.got) + __vma_to_lma) { 267*4882a593Smuzhiyun __got_start = .; 268*4882a593Smuzhiyun KEEP (*(.got.plt)) 269*4882a593Smuzhiyun KEEP (*(.got)) 270*4882a593Smuzhiyun __got_end = .; 271*4882a593Smuzhiyun } 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun- . = ALIGN(4); 274*4882a593Smuzhiyun- 275*4882a593Smuzhiyun- __dynamic_vma = .; 276*4882a593Smuzhiyun- __dynamic_lma = __dynamic_vma + __text_lma - __text_vma; 277*4882a593Smuzhiyun- .dynamic : AT(__dynamic_lma) { 278*4882a593Smuzhiyun+ .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) { 279*4882a593Smuzhiyun __dynamic_start = .; 280*4882a593Smuzhiyun *(.dynamic) 281*4882a593Smuzhiyun __dynamic_end = .; 282*4882a593Smuzhiyun } 283*4882a593Smuzhiyun 284*4882a593Smuzhiyun- . = ALIGN(32); 285*4882a593Smuzhiyun- 286*4882a593Smuzhiyun- __data_vma = .; 287*4882a593Smuzhiyun- __data_lma = __data_vma + __text_lma - __text_vma; 288*4882a593Smuzhiyun- .data : AT(__data_lma) { 289*4882a593Smuzhiyun+ .data : AT(ADDR(.data) + __vma_to_lma) { 290*4882a593Smuzhiyun __data_start = .; 291*4882a593Smuzhiyun *(.data) 292*4882a593Smuzhiyun *(.data.*) 293*4882a593Smuzhiyun-- 294*4882a593Smuzhiyun2.13.3 295*4882a593Smuzhiyun 296