source: mainline/boot/tools/ia64/vmaxlma.c@ 8ccd2ea

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 8ccd2ea was 1098249, checked in by Martin Decky <martin@…>, 19 years ago

new place for vmaxlma

  • Property mode set to 100644
File size: 1.5 KB
Line 
1/*
2 * Swap VMA and LMA in ELF header.
3 *
4 * by Jakub Jermar <jermar@itbs.cz>
5 *
6 * GPL'ed, copyleft
7 */
8
9/*
10 * HP's IA-64 simulator Ski seems to confuse VMA and LMA in the ELF header.
11 * Instead of using LMA, Ski loads sections at their VMA addresses.
12 * This short program provides a workaround for this bug by simply
13 * swapping VMA and LMA in the ELF header of the executable.
14 *
15 * Note that after applying this workaround, you will be able to load
16 * ELF objects with different VMA and LMA in Ski, but the executable
17 * will become wronged for other potential uses.
18 */
19
20#include <stdio.h>
21#include <stdlib.h>
22#include <sys/types.h>
23#include <sys/stat.h>
24#include <sys/mman.h>
25#include <unistd.h>
26#include <fcntl.h>
27
28void syntax(char *prg)
29{
30 printf("%s ELF-file\n", prg);
31 exit(1);
32}
33
34void error(char *msg)
35{
36 printf("Error: %s\n", msg);
37 exit(2);
38}
39
40#define ELF_VMA (0x50/sizeof(unsigned long long))
41#define ELF_LMA (0x58/sizeof(unsigned long long))
42#define ELF_ENTRY (0x18/sizeof(unsigned long long))
43
44#define LENGTH 0x98
45
46int main(int argc, char *argv[])
47{
48 int fd;
49 unsigned long long vma, lma,entry;
50 unsigned long long *elf;
51
52 if (argc != 2)
53 syntax(argv[0]);
54
55 fd = open(argv[1], O_RDWR);
56 if (fd == -1)
57 error("open failed");
58
59 elf = mmap(NULL, LENGTH, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
60 if ((void *) elf == (void *) -1)
61 error("map failed");
62
63 lma = elf[ELF_LMA];
64 elf[ELF_VMA] = lma;
65 entry = lma;
66 elf[ELF_ENTRY] = entry;
67
68 if (munmap(elf, LENGTH) == -1)
69 error("munmap failed");
70
71 if (close(fd) == -1)
72 error("close failed");
73
74 return 0;
75}
Note: See TracBrowser for help on using the repository browser.