[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Static qemu-user-x86_64 "Unable to find a guest_base to satisfy all gues
From: |
Stefan Hajnoczi |
Subject: |
Static qemu-user-x86_64 "Unable to find a guest_base to satisfy all guest address mapping requirements" |
Date: |
Tue, 9 Jan 2024 09:24:20 -0500 |
Hi Richard,
Christophe Fergeau found that Fedora's
qemu-user-static-x86-8.1.3-1.fc39.aarch64 fails when running a
statically linked hello world binary:
qemu-x86_64-static: /root/podman_hello_world.alpine: Unable to find a
guest_base to satisfy all guest address mapping requirements
0000000000000000-0000000000000fff
0000000000400000-00000000004047ef
That error message was introduced in QEMU 8.1 commit dd55885516f4
("linux-user: Rewrite non-fixed probe_guest_base").
Fedora's qemu-x86_64-static /proc/self/maps looks like this on aarch64:
00400000-00401000 r--p 00000000 00:22 78921
/usr/bin/qemu-x86_64-static
^^^^^^^^^^^^^^^^^
00410000-0066b000 r-xp 00010000 00:22 78921
/usr/bin/qemu-x86_64-static
00670000-0078e000 r--p 00270000 00:22 78921
/usr/bin/qemu-x86_64-static
00793000-007b0000 r--p 00393000 00:22 78921
/usr/bin/qemu-x86_64-static
007b0000-007dd000 rw-p 003b0000 00:22 78921
/usr/bin/qemu-x86_64-static
007dd000-007ef000 rw-p 00000000 00:00 0 [heap]
007ef000-008b7000 rw-p 00000000 00:00 0 [heap]
ffffe8000000-ffffeffff000 rwxp 00000000 00:00 0
ffffeffff000-fffff0000000 ---p 00000000 00:00 0
fffff0000000-fffff0021000 rw-p 00000000 00:00 0
fffff0021000-fffff4000000 ---p 00000000 00:00 0
fffff776c000-fffff77ed000 rw-p 00000000 00:00 0
fffff77ed000-fffff77fd000 ---p 00000000 00:00 0
fffff77fd000-fffff7ffd000 rw-p 00000000 00:00 0
fffff7ffd000-fffff7fff000 r--p 00000000 00:00 0 [vvar]
fffff7fff000-fffff8000000 r-xp 00000000 00:00 0 [vdso]
fffffffdf000-1000000000000 rw-p 00000000 00:00 0 [stack]
Address 0x400000 is used by both the statically linked QEMU and the
statically linked hello world binary:
$ readelf -a podman_hello_world.alpine
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x401047
Start of program headers: 64 (bytes into file)
Start of section headers: 75000 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 9
Size of section headers: 64 (bytes)
Number of section headers: 27
Section header string table index: 26
Section Headers:
[Nr] Name Type Address Offset
Size EntSize Flags Link Info Align
[ 0] NULL 0000000000000000 00000000
0000000000000000 0000000000000000 0 0 0
[ 1] .note.gnu.pr[...] NOTE 0000000000400238 00000238
0000000000000030 0000000000000000 A 0 0 8
[ 2] .note.gnu.bu[...] NOTE 0000000000400268 00000268
0000000000000024 0000000000000000 A 0 0 4
[ 3] .init PROGBITS 0000000000401000 00001000
0000000000000003 0000000000000000 AX 0 0 1
[ 4] .text PROGBITS 0000000000401010 00001010
0000000000000e90 0000000000000000 AX 0 0 16
[ 5] .fini PROGBITS 0000000000401ea0 00001ea0
0000000000000003 0000000000000000 AX 0 0 1
[ 6] .rodata PROGBITS 0000000000402000 00002000
00000000000001ad 0000000000000001 AMS 0 0 8
[ 7] .eh_frame PROGBITS 00000000004021b0 000021b0
0000000000000034 0000000000000000 A 0 0 8
[ 8] .init_array INIT_ARRAY 0000000000403fb8 00002fb8
0000000000000008 0000000000000008 WA 0 0 8
[ 9] .fini_array FINI_ARRAY 0000000000403fc0 00002fc0
0000000000000008 0000000000000008 WA 0 0 8
[10] .data.rel.ro PROGBITS 0000000000403fc8 00002fc8
0000000000000010 0000000000000000 WA 0 0 8
[11] .got PROGBITS 0000000000403fd8 00002fd8
0000000000000028 0000000000000008 WA 0 0 8
[12] .data PROGBITS 0000000000404000 00003000
0000000000000110 0000000000000000 WA 0 0 32
[13] .bss NOBITS 0000000000404120 00003110
00000000000006d0 0000000000000000 WA 0 0 32
[14] .comment PROGBITS 0000000000000000 00003110
0000000000000031 0000000000000001 MS 0 0 1
[15] .debug_aranges PROGBITS 0000000000000000 00003150
00000000000006a0 0000000000000000 0 0 16
[16] .debug_info PROGBITS 0000000000000000 000037f0
0000000000006157 0000000000000000 0 0 1
[17] .debug_abbrev PROGBITS 0000000000000000 00009947
000000000000247d 0000000000000000 0 0 1
[18] .debug_line PROGBITS 0000000000000000 0000bdc4
0000000000001d6c 0000000000000000 0 0 1
[19] .debug_frame PROGBITS 0000000000000000 0000db30
0000000000000858 0000000000000000 0 0 8
[20] .debug_str PROGBITS 0000000000000000 0000e388
0000000000000ea5 0000000000000001 MS 0 0 1
[21] .debug_line_str PROGBITS 0000000000000000 0000f22d
000000000000044d 0000000000000001 MS 0 0 1
[22] .debug_loclists PROGBITS 0000000000000000 0000f67a
00000000000016bc 0000000000000000 0 0 1
[23] .debug_rnglists PROGBITS 0000000000000000 00010d36
0000000000000431 0000000000000000 0 0 1
[24] .symtab SYMTAB 0000000000000000 00011168
0000000000000c90 0000000000000018 25 62 8
[25] .strtab STRTAB 0000000000000000 00011df8
00000000000005e0 0000000000000000 0 0 1
[26] .shstrtab STRTAB 0000000000000000 000123d8
0000000000000120 0000000000000000 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
L (link order), O (extra OS processing required), G (group), T (TLS),
C (compressed), x (unknown), o (OS specific), E (exclude),
D (mbind), l (large), p (processor specific)
There are no section groups in this file.
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0x000000000000028c 0x000000000000028c R 0x1000
LOAD 0x0000000000001000 0x0000000000401000 0x0000000000401000
0x0000000000000ea3 0x0000000000000ea3 R E 0x1000
LOAD 0x0000000000002000 0x0000000000402000 0x0000000000402000
0x00000000000001e4 0x00000000000001e4 R 0x1000
LOAD 0x0000000000002fb8 0x0000000000403fb8 0x0000000000403fb8
0x0000000000000158 0x0000000000000838 RW 0x1000
NOTE 0x0000000000000238 0x0000000000400238 0x0000000000400238
0x0000000000000030 0x0000000000000030 R 0x8
NOTE 0x0000000000000268 0x0000000000400268 0x0000000000400268
0x0000000000000024 0x0000000000000024 R 0x4
GNU_PROPERTY 0x0000000000000238 0x0000000000400238 0x0000000000400238
0x0000000000000030 0x0000000000000030 R 0x8
GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 RW 0x10
GNU_RELRO 0x0000000000002fb8 0x0000000000403fb8 0x0000000000403fb8
0x0000000000000048 0x0000000000000048 R 0x1
Oddly, when I compile static QEMU from source on this machine, then the
resulting binary does not use 0x400000 and it can successfully run the
hello world binary. Maybe the address is related to the compiler flags
or something else in Fedora's RPM build environment.
There is a bugzilla tracking this here:
https://bugzilla.redhat.com/show_bug.cgi?id=2256916
Any ideas what can be done to solve this problem?
Thanks,
Stefan
signature.asc
Description: PGP signature
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Static qemu-user-x86_64 "Unable to find a guest_base to satisfy all guest address mapping requirements",
Stefan Hajnoczi <=