u-boot-brain/cmd
Christian Gmeiner 476c2fcd28 bootvx: use program header for loading
The section header address is a VMA whereas the address found in
the program header is a physical one. With this change it is
possible to load and start a vx7 intel generic based image.

$ readelf -l /tmp/vx7

Elf file type is EXEC (Executable file)
Entry point 0x408000
There are 2 program headers, starting at offset 52

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x001000 0x00408000 0x00408000 0x04000 0x04000 RWE 0x1000
  LOAD           0x005000 0xe040c000 0x0040c000 0x583a84 0x5ccc70 RWE 0x1000

 Section to Segment mapping:
  Segment Sections...
   00     .text.locore .data.locore
   01     .text .eh_frame .wrs_build_vars .data .tls_data .tls_vars .bss

$ readelf -S /tmp/vx7
There are 13 section headers, starting at offset 0x588af8:

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .text.locore      PROGBITS        00408000 001000 00011e 00  AX  0   0 16
  [ 2] .data.locore      PROGBITS        00409000 002000 003000 00  WA  0   0 4096
  [ 3] .text             PROGBITS        e040c000 005000 4802a0 00 WAX  0   0 32
  [ 4] .eh_frame         PROGBITS        e088c2a0 4852a0 0a1ed0 00   A  0   0  4
  [ 5] .wrs_build_vars   PROGBITS        e092e170 527170 000190 00  Ax  0   0  1
  [ 6] .data             PROGBITS        e092f000 528000 060a70 00  WA  0   0 4096
  [ 7] .tls_data         PROGBITS        e098fa70 588a70 000004 00   A  0   0  4
  [ 8] .tls_vars         PROGBITS        e098fa78 588a78 00000c 00  WA  0   0  4
  [ 9] .bss              NOBITS          e098faa0 588a84 0491d0 00  WA  0   0 32
  [10] .shstrtab         STRTAB          00000000 588a84 000074 00      0   0  1
  [11] .symtab           SYMTAB          00000000 588d00 056ee0 10     12 9758  4
  [12] .strtab           STRTAB          00000000 5dfbe0 05f48a 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

For completeness here are the same information for an old vx5 based image. After
this change it is possible to boot vx5 and vx7 (intel generic) images.

$ readelf -l /tmp/vx5

Elf file type is EXEC (Executable file)
Entry point 0x308000
There are 1 program headers, starting at offset 52

Program Headers:
 Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
 LOAD           0x000060 0x00308000 0x00308000 0x3513a0 0x757860 RWE 0x20

Section to Segment mapping:
 Segment Sections...
  00     .text .data .bss
[christian@chgm-pc ~]$ readelf -S /tmp/vx5
There are 12 section headers, starting at offset 0x356580:

Section Headers:
 [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
 [ 0]                   NULL            00000000 000000 000000 00      0   0  0
 [ 1] .text             PROGBITS        00308000 000060 319b10 00 WAX  0   0 32
 [ 2] .data             PROGBITS        00621b20 319b80 037880 00  WA  0   0 32
 [ 3] .bss              NOBITS          006593a0 351400 4064c0 00  WA  0   0 16
 [ 4] .debug_aranges    PROGBITS        00000000 351400 000060 00      0   0  1
 [ 5] .debug_pubnames   PROGBITS        00000000 351460 00018b 00      0   0  1
 [ 6] .debug_info       PROGBITS        00000000 3515eb 003429 00      0   0  1
 [ 7] .debug_abbrev     PROGBITS        00000000 354a14 000454 00      0   0  1
 [ 8] .debug_line       PROGBITS        00000000 354e68 0016a4 00      0   0  1
 [ 9] .shstrtab         STRTAB          00000000 35650c 000071 00      0   0  1
 [10] .symtab           SYMTAB          00000000 356760 0440e0 10     11 8574  4
 [11] .strtab           STRTAB          00000000 39a840 03e66c 00      0   0  1
Key to Flags:
 W (write), A (alloc), X (execute), M (merge), S (strings)
 I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
 O (extra OS processing required) o (OS specific), p (processor specific)

Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
2018-04-06 20:45:44 -04:00
..
fastboot cmd: fastboot: Kconfig: solve config issue 2018-02-21 20:28:15 +01:00
mvebu mmc: add a Kconfig option to enable the support for MMC write operations 2018-01-12 18:11:24 +09:00
ti cmd: ti: Generalize cmd_ddr3 command 2018-01-19 15:49:26 -05:00
x86 x86: Move commands from under arch/x86 to cmd/x86/ 2018-01-08 16:52:22 +08:00
.gitignore cmd: rework "license" command 2017-02-08 15:56:28 -05:00
aes.c aes: Allow non-zero initialization vector 2018-01-29 12:50:13 -05:00
armflash.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
bdinfo.c powerpc: mpc8xx: Change CONFIG_8xx to CONFIG_MPC8xx 2018-04-06 16:30:37 -04:00
bedbug.c powerpc: remove 4xx support 2017-07-03 17:35:28 -04:00
blk_common.c Move most CONFIG_HAVE_BLOCK_DEVICE to Kconfig 2018-02-08 19:09:03 -05:00
blkcache.c cmd: blkcache: simplify sub-command handling 2016-04-11 12:44:38 -04:00
blob.c crypto/fsl: Update blob cmd to accept 64bit addresses 2016-08-02 09:45:39 -07:00
bmp.c dm: Use uclass_first_device_err() where it is useful 2016-03-14 15:34:50 -06:00
boot.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
bootefi.c libfdt: move headers to <linux/libfdt.h> and <linux/libfdt_env.h> 2018-03-05 10:16:28 -05:00
booti.c cmd: booti: fix invalid image address in debug message 2018-02-13 23:24:22 -05:00
bootm.c env: Rename getenv/_f() to env_get() 2017-08-16 08:30:24 -04:00
bootmenu.c env: Rename getenv/_f() to env_get() 2017-08-16 08:30:24 -04:00
bootstage.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
bootz.c bootz/booti: relocate ramdisk if CONFIG_SYS_BOOT_RAMDISK_HIGH set 2017-01-24 10:35:55 -05:00
btrfs.c cmd: Add the 'btrsubvol' command to list BTRFS subvolumes 2017-10-02 21:52:18 -04:00
cache.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
cbfs.c cmd: cbfs: fix reading the end_of_rom pointer for 64bit archs 2018-03-31 16:00:03 +08:00
clk.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
config.c cmd: add a new command "config" to show .config contents 2017-02-08 15:56:26 -05:00
console.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
cpu.c cmd: cpu: refactor to ensure devices are probed and improve code style 2017-05-10 16:16:09 +02:00
cramfs.c env: Rename getenv/_f() to env_get() 2017-08-16 08:30:24 -04:00
cros_ec.c dm: core: Add flags parameter to device_remove() 2017-04-04 20:15:10 -06:00
dataflash_mmc_mux.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
date.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
demo.c sandbox: Add 64-bit sandbox 2018-02-18 15:53:48 -07:00
dfu.c dfu: Rename _FUNCTION_DFU to DFU_OVER_ 2018-02-21 20:28:15 +01:00
diag.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
disk.c cmd: Rework disk.c usage 2016-09-09 15:53:14 -04:00
display.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
echo.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
eeprom.c Convert CONFIG_CMD_EEPROM et al to Kconfig 2017-05-22 09:33:49 -04:00
efi.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
elf.c bootvx: use program header for loading 2018-04-06 20:45:44 -04:00
ethsw.c cmd: ethsw: Fix out-of-bounds error 2017-06-16 10:11:42 -04:00
exit.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
ext2.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
ext4.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
fastboot.c treewide: replace with error() with pr_err() 2017-10-04 11:59:44 -04:00
fat.c cmd/fat: Do not crash on write when <bytes> is not specified 2016-09-23 08:55:58 -04:00
fdc.c Fix spelling of "occurred". 2016-05-02 18:37:09 -04:00
fdt.c libfdt: move headers to <linux/libfdt.h> and <linux/libfdt_env.h> 2018-03-05 10:16:28 -05:00
fitupd.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
flash.c Drop CONFIG_HAS_DATAFLASH 2017-10-16 09:42:51 -04:00
fpga.c env: Rename getenv/_f() to env_get() 2017-08-16 08:30:24 -04:00
fpgad.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
fs_uuid.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
fs.c efi_loader: Pass file path to payload 2016-04-18 17:11:36 -04:00
fuse.c treewide: replace #include <asm/errno.h> with <linux/errno.h> 2016-09-23 17:55:42 -04:00
gettime.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
gpio.c gpio: Report errors when GPIOs cannot be read 2016-03-17 21:27:37 -06:00
gpt.c cmd: gpt: solve issue for swap and rename command 2017-10-23 17:28:11 -04:00
hash.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
help.c Drop command-processing code when CONFIG_CMDLINE is disabled 2016-04-01 17:17:40 -04:00
host.c cmd/host: add missing \n in help text 2017-01-20 09:15:24 -05:00
i2c.c cmd: i2c: Fix use sdram sub command with CONFIG_DM_I2C 2017-12-07 09:29:35 +01:00
ide.c cmd: ide: Make the first device the default one 2017-09-10 12:27:43 -04:00
ini.c env: Rename getenv/_f() to env_get() 2017-08-16 08:30:24 -04:00
io.c cmd/io.c: Fix comparison of unsigned expression warning 2017-05-12 08:37:38 -04:00
iotrace.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
irq.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
itest.c env: Rename getenv/_f() to env_get() 2017-08-16 08:30:24 -04:00
jffs2.c mtd: nand: Rename nand.h into rawnand.h 2017-12-04 22:00:00 +09:00
Kconfig sunxi: revert disabling of features 2018-04-04 14:15:40 +05:30
led.c cmd/led.c: Remove unnecessary check on 'cmd' value 2017-05-12 08:37:38 -04:00
legacy_led.c led: Mark existing driver as legacy 2017-04-14 19:38:57 -06:00
license.c cmd: rework "license" command 2017-02-08 15:56:28 -05:00
load.c env: Rename getenv/_f() to env_get() 2017-08-16 08:30:24 -04:00
log.c log: Add a command to output a log record 2018-02-03 10:09:27 -07:00
lzmadec.c env: Rename common functions related to setenv() 2017-08-16 08:23:32 -04:00
mac.c cmd: mac: Update description of help 2017-11-15 10:54:06 -08:00
Makefile cmd: Make CONFIG_CMD_FPGA depend on CONFIG_FPGA 2018-02-05 20:58:11 -05:00
md5sum.c env: Rename getenv/_f() to env_get() 2017-08-16 08:30:24 -04:00
mdio.c cmd: mdio: Fix style violations 2018-02-26 15:47:43 -06:00
mem.c Drop CONFIG_HAS_DATAFLASH 2017-10-16 09:42:51 -04:00
mfsl.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
mii.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
misc.c cmd: misc: Add support for fractions in sleep 2016-07-25 12:00:05 -04:00
mmc_spi.c dm: block: Rename device number member dev to devnum 2016-03-14 15:34:50 -06:00
mmc.c mmc: remove hc_wp_grp_size from struct mmc if not needed 2018-01-12 18:11:24 +09:00
mp.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
mtdparts.c mtdparts: Correct use of debug() 2017-12-07 15:17:00 -05:00
nand.c env: Rename getenv/_f() to env_get() 2017-08-16 08:30:24 -04:00
net.c env: Rename some other getenv()-related functions 2017-08-16 08:31:11 -04:00
nvedit.c cmd: nvedit: env_get_f must check for env_get_char error codes 2018-01-31 18:45:10 -05:00
nvme.c nvme: Adjust the 'nvme' command to use blk_common_cmd() 2017-08-28 07:17:15 -04:00
onenand.c cmd/onenand.c: block align warning 2016-10-06 20:57:42 -04:00
part.c cmd: part: Extract common code to separate function 2018-03-13 21:59:27 -04:00
pci.c Kconfig: Drop CONFIG_CMD_PCI_ENUM 2017-08-11 15:41:51 -04:00
pcmcia.c powerpc, 8xx: remove support for 8xx 2017-06-12 08:37:55 -04:00
pmic.c cmd: pmic: update help description 2018-01-19 15:49:29 -05:00
pxe.c cmd/pxe.c: Rework bootargs construction to clarify string checks 2017-10-16 09:42:51 -04:00
qfw.c env: Rename getenv/_f() to env_get() 2017-08-16 08:30:24 -04:00
read.c cmd/read.c: Fix checking blk_dread return value 2017-08-20 09:54:30 -04:00
reginfo.c powerpc: Remove unneccessary #ifdefs in reginfo 2017-07-22 22:22:49 -04:00
regulator.c treewide: replace with error() with pr_err() 2017-10-04 11:59:44 -04:00
reiser.c env: Rename getenv/_f() to env_get() 2017-08-16 08:30:24 -04:00
remoteproc.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
rockusb.c usb: rockchip: add rockusb command 2018-01-10 11:11:06 +01:00
sata.c dm: sata: Support driver model with the 'sata' command 2017-08-17 16:44:17 +09:00
scsi.c dm: scsi: Adjust the 'scsi' command to use blk_common_cmd() 2017-08-17 16:44:16 +09:00
setexpr.c env: Rename getenv/_f() to env_get() 2017-08-16 08:30:24 -04:00
sf.c cmd: sf: fix map_physmem check 2018-03-22 13:25:20 -04:00
sha1sum.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
sound.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
source.c env: Rename getenv_hex(), getenv_yesno(), getenv_ulong() 2017-08-16 08:30:32 -04:00
spi.c cmd: spi: check return value of strdup 2016-03-27 09:12:55 -04:00
spl.c libfdt: move headers to <linux/libfdt.h> and <linux/libfdt_env.h> 2018-03-05 10:16:28 -05:00
strings.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
terminal.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
test.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
thordown.c treewide: replace with error() with pr_err() 2017-10-04 11:59:44 -04:00
time.c cmd/time.c: Initialize 'repeatable' variable 2017-10-06 11:28:21 -04:00
tpm_test.c treewide: replace with error() with pr_err() 2017-10-04 11:59:44 -04:00
tpm.c env: Rename common functions related to setenv() 2017-08-16 08:23:32 -04:00
trace.c env: Rename getenv_hex(), getenv_yesno(), getenv_ulong() 2017-08-16 08:30:32 -04:00
tsi148.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
ubi.c cmd: set filesize variable in ubi read 2017-09-12 10:08:05 +02:00
ubifs.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
universe.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
unzip.c env: Rename common functions related to setenv() 2017-08-16 08:23:32 -04:00
usb_gadget_sdp.c usb: gadget: sdp: add missing line breaks 2018-02-21 20:28:15 +01:00
usb_mass_storage.c treewide: replace with error() with pr_err() 2017-10-04 11:59:44 -04:00
usb.c cmd: usb: ignore blk, emulation devices in usb tree/info display 2017-11-26 02:22:36 +01:00
version.c display_options: Refactor to allow obtaining the banner 2017-07-11 10:08:19 -06:00
ximg.c env: Rename getenv_hex(), getenv_yesno(), getenv_ulong() 2017-08-16 08:30:32 -04:00
yaffs2.c Remove the cmd_ prefix from command files 2016-01-25 10:39:43 -05:00
zfs.c env: Rename getenv/_f() to env_get() 2017-08-16 08:30:24 -04:00
zip.c env: Rename common functions related to setenv() 2017-08-16 08:23:32 -04:00