I'm working in a project to use grub2 to boot some ppc machines(p6 , p5 and so on) and we had some difficulties with a grub modules problem. Grub fails to load modules.
When debugging I noted that grub try to find the headerinfo modules struc (which is identified by the magic number 0x676d696d) in the address 0x2d000 (_end + gap aligned in 4k blocks). but this address does not contains the headerinfo. So i altered the source code such as the memory is searched to find the magic number. It is then found at address 0x38f4c and then grub find some modules (but fails after) has showed in attachment grub2.txt. that address calculation led me to believe that I can tell where the struct will be on memory based in its place in the binary. I also noted that basemod ( indicates where the modules sections begin) used by grub_mkelfimage is the same calculated by grub (_end + GAP). but it seems to not store it on the necessary address. using hexedit I could see that in the address 0xCC98 (in the file generated by grub_mkelfimage) is stored the struct header info. so in resume. address where grub tries to find the header 0x2d000. address where it is actually stored 0x38f4c. address where it is in the generated file 0xCC98. So my doubts are: How this address calculation works? How can I know where the struct will be in memory based in its address in the binary? It really works or only in some old OpenFirmare version? I followed the wiki tutorial in the process. That is the exit of the command: "readelf -l" (binary + modules): Elf file type is EXEC (Executable file) Entry point 0x10000 There are 4 program headers, starting at offset 52 Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align LOAD 0x0000b4 0x00010000 0x00010000 0x0cbe4 0x14098 RWE 0x10 GNU_STACK 0x00cc98 0x00000000 0x00000000 0x00000 0x00000 RWE 0x4 LOAD 0x00cc98 0x0002d000 0x0002d000 0x5c1c8 0x5c1c8 RWE 0x4 NOTE 0x068e60 0x00000000 0x00000000 0x0002c 0x00000 R 0x4 the exit of "readelf -a" is showed in attachment readelf.txt If you could help me, I will appreciate it. Thanks in advance! Best regards. Abranches, Manoel R.
cursor-on, unknown wordWelcome to GRUB! search= 0x38f4c end =0x24098 gap =0x8000 align=0x1000 base_mod=0x2d000 modinfo = 0x2d000 modinfo->magic = 0x3063ffff modinfo = 0x38f4c modinfo->magic = 0x676d696d ../kern/dl.c:527: module at 0x38f64, size 0xbc0 ../kern/dl.c:556: relocating to 0x2b8f0 ../kern/dl.c:513: flushing 0x14 bytes at 0x2b350 ../kern/dl.c:513: flushing 0x69 bytes at 0x2b3a0 ../kern/dl.c:513: flushing 0x460 bytes at 0x2b440 ../kern/dl.c:570: module name: acorn ../kern/dl.c:571: init function: 0x2b440 ../kern/dl.c:527: module at 0x39b30, size 0xefc ../kern/dl.c:556: relocating to 0x2b240 ../kern/dl.c:513: flushing 0x97 bytes at 0x2aa30 ../kern/dl.c:513: flushing 0x6ec bytes at 0x2ab00 ../kern/dl.c:570: module name: fshelp ../kern/dl.c:571: init function: 0x0 ../kern/dl.c:527: module at 0x3aa38, size 0x1aa4 ../kern/dl.c:556: relocating to 0x2a8b0 ../kern/dl.c:513: flushing 0x4 bytes at 0x29af0 ../kern/dl.c:513: flushing 0x20 bytes at 0x29b30 ../kern/dl.c:513: flushing 0x89 bytes at 0x29b80 ../kern/dl.c:513: flushing 0xbf4 bytes at 0x29c40 ../kern/dl.c:570: module name: affs ../kern/dl.c:571: init function: 0x29c40 ../kern/dl.c:527: module at 0x3c4e8, size 0x1be8 ../kern/dl.c:556: relocating to 0x29a20 ../kern/dl.c:513: flushing 0x4 bytes at 0x287f0 ../kern/dl.c:513: flushing 0x20 bytes at 0x28830 ../kern/dl.c:513: flushing 0x28 bytes at 0x28880 ../kern/dl.c:513: flushing 0x4 bytes at 0x288e0 ../kern/dl.c:513: flushing 0x108c bytes at 0x28920 ../kern/dl.c:570: module name: afs ../kern/dl.c:571: init function: 0x28920 ../kern/dl.c:527: module at 0x3e0dc, size 0xc9c ../kern/dl.c:556: relocating to 0x28720 ../kern/dl.c:513: flushing 0x4 bytes at 0x28190 ../kern/dl.c:513: flushing 0x14 bytes at 0x281d0 ../kern/dl.c:513: flushing 0x68 bytes at 0x28220 ../kern/dl.c:513: flushing 0x410 bytes at 0x282c0 ../kern/dl.c:570: module name: amiga ../kern/dl.c:571: init function: 0x282c0 ../kern/dl.c:527: module at 0x3ed84, size 0xe28 ../kern/dl.c:556: relocating to 0x280a0 ../kern/dl.c:513: flushing 0x4 bytes at 0x27a30 ../kern/dl.c:513: flushing 0x14 bytes at 0x27a70 ../kern/dl.c:513: flushing 0xfc bytes at 0x27ac0 ../kern/dl.c:513: flushing 0x458 bytes at 0x27bf0 ../kern/dl.c:570: module name: apple ../kern/dl.c:571: init function: 0x27bf0 ../kern/dl.c:527: module at 0x3fbb8, size 0xeca4 ../kern/dl.c:556: relocating to 0x27940 DEFAULT CATCH!, exception-handler=fff00300 at %SRR0: 0000000000013f88 %SRR1: 0000000000003002 Open Firmware exception handler entered from non-OF code Client's Fix Pt Regs: 00 0000000000000010 00000000018dff50 0000000000000000 0000000065765b1b 04 000000000001a944 0000000000000000 0000000000003002 0000000000000010 08 00000000018dfe08 000000000001a944 000000000000000a 0000000065765b1b 0c 0000000000000000 0000000000000000 0000000000000000 0000000000000000 10 0000000000000000 0000000000000000 0000000000000000 0000000000000000 14 0000000000c00000 0000000000000008 0000000000000000 0000000000000000 18 0000000000000000 000000000001af4c 000000000001a944 000000000003fbb8 1c 0000000000000007 000000000004881c 0000000000027940 000000000003fbb8 Special Regs: %IV: 00000300 %CR: 24000048 %XER: 00000000 %DSISR: 08000000 %SRR0: 0000000000013f88 %SRR1: 0000000000003002 %LR: 000000000001291c %CTR: 0000000000017930 %DAR: 0000000065765b1b Virtual PID = 0 PFW: Unable to send error log! ofdbg 0 >
ELF Header: Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, big endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: PowerPC Version: 0x1 Entry point address: 0x10000 Start of program headers: 52 (bytes into file) Start of section headers: 0 (bytes into file) Flags: 0x0 Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 4 Size of section headers: 40 (bytes) Number of section headers: 0 Section header string table index: 0 <corrupt: out of range> There are no sections in this file. There are no sections in this file. Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align LOAD 0x0000b4 0x00010000 0x00010000 0x0cbe4 0x14098 RWE 0x10 GNU_STACK 0x00cc98 0x00000000 0x00000000 0x00000 0x00000 RWE 0x4 LOAD 0x00cc98 0x0002d000 0x0002d000 0x5c1c8 0x5c1c8 RWE 0x4 NOTE 0x068e60 0x00000000 0x00000000 0x0002c 0x00000 R 0x4 There is no dynamic section in this file. There are no relocations in this file. There are no unwind sections in this file. No version information found in this file.
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel