Re: i386-vmlinuxldss-distinguish-absolute-symbols.patch added to -mm tree

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

 



Hello,

I wonder why this patch
(i386-vmlinuxldss-distinguish-absolute-symbols.patch) isn't merged?
Any reason? Sam had agreed it is safe. Or simply Linus rejected it?

-- coywolf

2005/7/30, [email protected] <[email protected]>:
>
> The patch titled
>
>      i386: vmlinux.lds.S: Distinguish absolute symbols
>
> has been added to the -mm tree.  Its filename is
>
>      i386-vmlinuxldss-distinguish-absolute-symbols.patch
>
> Patches currently in -mm which might be from [email protected] are
>
> fix-sync_tsc-hang.patch
> reboot-remove-device_suspendpmsg_freeze-from.patch
> i386-machine_kexec-cleanup-inline-assembly.patch
> x86_64-machine_kexec-cleanup-inline-assembly.patch
> x86_64-machine_kexec-use-standard-pagetable-helpers.patch
> x86_64-io_apicc-memorize-at-bootup-where-the-i8259-is.patch
> i386-io_apicc-memorize-at-bootup-where-the-i8259-is.patch
> i386-vmlinuxldss-distinguish-absolute-symbols.patch
> forcedeth-write-back-the-misordered-mac-address.patch
> x86_64-fix-off-by-one-in-e820_mapped.patch
>
>
>
> From: Eric W. Biederman <[email protected]>
>
> Ld knows about 2 kinds of symbols, absolute and section relative.  Section
> relative symbols symbols change value when a section is moved and absolute
> symbols do not.
>
> Currently in the linker script we have several labels marking the beginning
> and ending of sections that are outside of sections, making them absolute
> symbols.  Having a mixture of absolute and section relative symbols refereing
> to the same data is currently harmless but it is confusing.
>
> My ultimate goal is to build a relocatable kernel.  The safest and least
> intrusive technique is to generate relocation entries so the kernel can be
> relocated at load time.  The only penalty would be an increase in the size of
> the kernel binary.  The problem is that if absolute and relocatable symbols
> are not properly specified absolute symbols will be relocated or section
> relative symbols won't be, which is fatal.
>
> The practical motivation is that when generating kernels that will run from a
> reserved area for analyzing what caused a kernel panic, it is simpler if you
> don't need to hard code the physical memory location they will run at,
> especially for the distributions.
>
> Signed-off-by: Eric W. Biederman <[email protected]>
> Signed-off-by: Andrew Morton <[email protected]>
> ---
>
>  arch/i386/kernel/vmlinux.lds.S |   90 +++++++++++++++++++++++++----------------
>  1 files changed, 55 insertions(+), 35 deletions(-)
>
> diff -puN arch/i386/kernel/vmlinux.lds.S~i386-vmlinuxldss-distinguish-absolute-symbols arch/i386/kernel/vmlinux.lds.S
> --- devel/arch/i386/kernel/vmlinux.lds.S~i386-vmlinuxldss-distinguish-absolute-symbols  2005-07-29 13:18:38.000000000 -0700
> +++ devel-akpm/arch/i386/kernel/vmlinux.lds.S   2005-07-29 13:18:38.000000000 -0700
> @@ -17,21 +17,22 @@ SECTIONS
>    . = __KERNEL_START;
>    phys_startup_32 = startup_32 - LOAD_OFFSET;
>    /* read-only */
> -  _text = .;                   /* Text and read-only data */
>    .text : AT(ADDR(.text) - LOAD_OFFSET) {
> +         _text = .;            /* Text and read-only data */
>         *(.text)
>         SCHED_TEXT
>         LOCK_TEXT
>         *(.fixup)
>         *(.gnu.warning)
> -       } = 0x9090
> -
> -  _etext = .;                  /* End of text section */
> +       _etext = .;             /* End of text section */
> +  } = 0x9090
>
>    . = ALIGN(16);               /* Exception table */
> -  __start___ex_table = .;
> -  __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) { *(__ex_table) }
> -  __stop___ex_table = .;
> +  __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {
> +       __start___ex_table = .;
> +       *(__ex_table)
> +       __stop___ex_table = .;
> +  }
>
>    RODATA
>
> @@ -39,13 +40,15 @@ SECTIONS
>    .data : AT(ADDR(.data) - LOAD_OFFSET) {      /* Data */
>         *(.data)
>         CONSTRUCTORS
> -       }
> +  }
>
>    . = ALIGN(4096);
> -  __nosave_begin = .;
> -  .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) { *(.data.nosave) }
> -  . = ALIGN(4096);
> -  __nosave_end = .;
> +  .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
> +       __nosave_begin = .;
> +       *(.data.nosave)
> +       . = ALIGN(4096);
> +       __nosave_end = .;
> +  }
>
>    . = ALIGN(4096);
>    .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) {
> @@ -60,7 +63,9 @@ SECTIONS
>    /* rarely changed data like cpu maps */
>    . = ALIGN(32);
>    .data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET) { *(.data.read_mostly) }
> -  _edata = .;                  /* End of data section */
> +  .data.end : AT(ADDR(.data.end) - LOAD_OFFSET) {
> +       _edata = .;             /* End of data section */
> +  }
>
>    . = ALIGN(THREAD_SIZE);      /* init_task */
>    .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
> @@ -69,7 +74,9 @@ SECTIONS
>
>    /* will be freed after init */
>    . = ALIGN(4096);             /* Init code and data */
> -  __init_begin = .;
> +  .init.begin : AT(ADDR(.init.begin) - LOAD_OFFSET) {
> +       __init_begin = .;
> +  }
>    .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
>         _sinittext = .;
>         *(.init.text)
> @@ -77,11 +84,13 @@ SECTIONS
>    }
>    .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) { *(.init.data) }
>    . = ALIGN(16);
> -  __setup_start = .;
> -  .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) { *(.init.setup) }
> -  __setup_end = .;
> -  __initcall_start = .;
> +  .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) {
> +       __setup_start = .;
> +       *(.init.setup)
> +       __setup_end = .;
> +  }
>    .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) {
> +       __initcall_start = .;
>         *(.initcall1.init)
>         *(.initcall2.init)
>         *(.initcall3.init)
> @@ -89,20 +98,20 @@ SECTIONS
>         *(.initcall5.init)
>         *(.initcall6.init)
>         *(.initcall7.init)
> +       __initcall_end = .;
>    }
> -  __initcall_end = .;
> -  __con_initcall_start = .;
>    .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
> +       __con_initcall_start = .;
>         *(.con_initcall.init)
> +       __con_initcall_end = .;
>    }
> -  __con_initcall_end = .;
>    SECURITY_INIT
>    . = ALIGN(4);
> -  __alt_instructions = .;
>    .altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) {
> +       __alt_instructions = .;
>         *(.altinstructions)
> +       __alt_instructions_end = .;
>    }
> -  __alt_instructions_end = .;
>    .altinstr_replacement : AT(ADDR(.altinstr_replacement) - LOAD_OFFSET) {
>         *(.altinstr_replacement)
>    }
> @@ -111,18 +120,26 @@ SECTIONS
>    .exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) { *(.exit.text) }
>    .exit.data : AT(ADDR(.exit.data) - LOAD_OFFSET) { *(.exit.data) }
>    . = ALIGN(4096);
> -  __initramfs_start = .;
> -  .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { *(.init.ramfs) }
> -  __initramfs_end = .;
> +  .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) {
> +       __initramfs_start = .;
> +       *(.init.ramfs)
> +       __initramfs_end = .;
> +  }
>    . = ALIGN(32);
> -  __per_cpu_start = .;
> -  .data.percpu  : AT(ADDR(.data.percpu) - LOAD_OFFSET) { *(.data.percpu) }
> -  __per_cpu_end = .;
> +  .data.percpu  : AT(ADDR(.data.percpu) - LOAD_OFFSET) {
> +       __per_cpu_start = .;
> +       *(.data.percpu)
> +       __per_cpu_end = .;
> +  }
>    . = ALIGN(4096);
> -  __init_end = .;
> +  .init.end : AT(ADDR(.init.end) - LOAD_OFFSET) {
> +       __init_end = .;
> +  }
>    /* freed after init ends here */
>
> -  __bss_start = .;             /* BSS */
> +  .bss.start : AT(ADDR(.bss.start) - LOAD_OFFSET) {
> +       __bss_start = .;                /* BSS */
> +  }
>    .bss.page_aligned : AT(ADDR(.bss.page_aligned) - LOAD_OFFSET) {
>         *(.bss.page_aligned)
>    }
> @@ -130,13 +147,16 @@ SECTIONS
>         *(.bss)
>    }
>    . = ALIGN(4);
> -  __bss_stop = .;
> -
> -  _end = . ;
> +  .bss.end : AT(ADDR(.bss.end) - LOAD_OFFSET) {
> +       __bss_stop = .;
> +       _end = . ;
> +  }
>
>    /* This is where the kernel creates the early boot page tables */
>    . = ALIGN(4096);
> -  pg0 = .;
> +  .pg : AT(ADDR(.pg) - LOAD_OFFSET) {
> +       pg0 = .;
> +  }
>
>    /* Sections to be discarded */
>    /DISCARD/ : {
> _

--
Coywolf Qi Hunt
http://sosdg.org/~coywolf/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux