H. Peter Anvin wrote:After the code was loaded (the compressed code, it seems that my GRUB doesn't support uncompressed loading), the above section contained zeroes. I snapped it fairly early, around secondary_startup_64, and then printed it in x86_64_start_kernel. The object file had the correct data (as displayed by objdump) so I'm assuming that the bootloading process didn't load the section correctly. Below was the linker script I used: --- linux-2.6.tip.orig/include/asm-generic/vmlinux.lds.h +++ linux-2.6.tip/include/asm-generic/vmlinux.lds.h @@ -373,9 +373,13 @@ #ifdef CONFIG_HAVE_ZERO_BASED_PER_CPU #define PERCPU(align) \ - . = ALIGN(align); \ + .data.percpu.abs = .; \ percpu : { } :percpu \ - __per_cpu_load = .; \ + .data.percpu.rel : AT(.data.percpu.abs - LOAD_OFFSET) { \ + BYTE(0) \ + . = ALIGN(align); \ + __per_cpu_load = .; \ + } \ .data.percpu 0 : AT(__per_cpu_load - LOAD_OFFSET) { \ *(.data.percpu.first) \ *(.data.percpu.shared_aligned) \ @@ -383,8 +387,8 @@ *(.data.percpu.page_aligned) \ ____per_cpu_size = .; \ } \ - . = __per_cpu_load + ____per_cpu_size; \ - data : { } :data + . = __per_cpu_load + ____per_cpu_size; + #else #define PERCPU(align) \ . = ALIGN(align); \ It showed all the correct address in the map and __per_cpu_load was a relative symbol (which was the objective.) Btw, our simulator, which only loads uncompressed code, had the data correct, so it *may* only be a result of the code being compressed. Thanks, Mike --
| Amit K. Arora | [RFC] Heads up on sys_fallocate() |
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
| Linus Torvalds | Linux 2.6.25-rc4 |
| Greg KH | Linux 2.6.25.10 |
git: | |
| Gerrit Renker | [PATCH 15/37] dccp: Set per-connection CCIDs via socket options |
| David Miller | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| David Miller | [GIT]: Networking |
| Ilpo Järvinen | Re: Strange Application bug, race in MSG_PEEK complaints (was: Bug#513695: fetchma... |
