Changeset ae9624e in mainline


Ignore:
Timestamp:
2005-09-04T23:38:03Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6153749
Parents:
824553ed
Message:

Symbol table now contains static functions too.
NOTE: gcc heavily inlines, be aware of optimizations.

Removed excesive item from boot page tables.

Files:
8 edited

Legend:

Unmodified
Added
Removed
  • arch/amd64/Makefile.inc

    r824553ed rae9624e  
    66AS=$(AMD64_BINUTILS_DIR)/$(AMD64_TARGET)-as
    77LD=$(AMD64_BINUTILS_DIR)/$(AMD64_TARGET)-ld
     8OBJDUMP=$(AMD64_BINUTILS_DIR)/$(AMD64_TARGET)-objdump
    89OBJCOPY=$(AMD64_BINUTILS_DIR)/$(AMD64_TARGET)-objcopy
    910BFD_NAME=elf64-x86-64
  • arch/amd64/src/boot/boot.S

    r824553ed rae9624e  
    158158        .fill 509,8,0
    159159        .quad ptl_2 + (PTL_WRITABLE | PTL_PRESENT)
    160         .fill 2,8,0
     160        .fill 1,8,0
    161161       
    162162.align 4096
  • arch/ia32/Makefile.inc

    r824553ed rae9624e  
    22AS=as
    33LD=ld
     4OBJDUMP=objdump
    45OBJCOPY=objcopy
    56BFD_NAME=elf32-i386
  • arch/ia64/Makefile.inc

    r824553ed rae9624e  
    77AS=$(IA-64_BINUTILS_DIR)/$(IA-64_TARGET)-as
    88LD=$(IA-64_BINUTILS_DIR)/$(IA-64_TARGET)-ld
     9OBJDUMP=$(IA-64_BINUTILS_DIR)/$(IA-64_TARGET)-objdump
    910OBJCOPY=$(IA-64_BINUTILS_DIR)/$(IA-64_TARGET)-objcopy
    1011BFD_NAME=elf64-little
  • arch/mips/Makefile.inc

    r824553ed rae9624e  
    77AS=$(MIPS_BINUTILS_DIR)/$(MIPS_TARGET)-as
    88LD=$(MIPS_BINUTILS_DIR)/$(MIPS_TARGET)-ld
     9OBJDUMP=$(MIPS_BINUTILS_DIR)/$(MIPS_TARGET)-objdump
    910OBJCOPY=$(MIPS_BINUTILS_DIR)/$(MIPS_TARGET)-objcopy
    1011BFD_NAME=elf32-tradlittlemips
  • arch/ppc/Makefile.inc

    r824553ed rae9624e  
    77AS=$(PPC_BINUTILS_DIR)/$(PPC_TARGET)-as
    88LD=$(PPC_BINUTILS_DIR)/$(PPC_TARGET)-ld
     9OBJDUMP=$(PPC_BINUTILS_DIR)/$(PPC_TARGET)-objdump
    910OBJCOPY=$(PPC_BINUTILS_DIR)/$(PPC_TARGET)-objcopy
    1011BFD_NAME=elf32-powerpc
  • src/Makefile

    r824553ed rae9624e  
    6666clean:
    6767        find . ../arch/$(ARCH)/src ../test -name '*.o' -exec rm \{\} \;
    68         -rm *.bin kernel.map kernel.map.pre debug/real_map.bin
     68        -rm *.bin kernel.map kernel.map.pre kernel.objdump debug/real_map.bin
    6969        $(MAKE) -C ../arch/$(ARCH)/boot clean
    7070
     
    7474        -$(MAKE) clean
    7575
    76 kernel.bin: $(arch_objects) $(objects) $(test_objects) ../arch/$(ARCH)/_link.ld
     76debug/real_map.bin: $(arch_objects) $(objects) $(test_objects) ../arch/$(ARCH)/_link.ld
    7777        $(OBJCOPY) -I binary -O $(BFD_NAME) -B $(BFD_ARCH) --prefix-sections=symtab Makefile debug/empty_map.o
    7878        $(LD) -T ../arch/$(ARCH)/_link.ld $(LFLAGS) $(arch_objects) $(objects) $(test_objects) debug/empty_map.o -o $@ -Map kernel.map.pre
    79         ../tools/genmap.py kernel.map.pre debug/real_map.bin
    80         $(OBJCOPY) -I binary -O $(BFD_NAME) -B $(BFD_ARCH) --prefix-sections=symtab debug/real_map.bin debug/real_map.o
     79        $(OBJDUMP) -t $(arch_objects) $(objects) $(test_objects) > kernel.objdump
     80        ../tools/genmap.py kernel.map.pre kernel.objdump debug/real_map.bin
     81
     82debug/real_map.o: debug/real_map.bin
     83        $(OBJCOPY) -I binary -O $(BFD_NAME) -B $(BFD_ARCH) --prefix-sections=symtab $< $@
     84
     85
     86kernel.bin: $(arch_objects) $(objects) $(test_objects) ../arch/$(ARCH)/_link.ld debug/real_map.o
    8187        $(LD) -T ../arch/$(ARCH)/_link.ld $(LFLAGS) $(arch_objects) $(objects) $(test_objects) debug/real_map.o -o $@ -Map kernel.map
    8288
  • tools/genmap.py

    r824553ed rae9624e  
    55import re
    66
    7 symline = re.compile(r'(0x[a-f0-9]+)\s+([^\s]+)$')
    8 fileline = re.compile(r'[^\s]+\s+0x[a-f0-9]+\s+0x[a-f0-9]+\s+([^\s]+\.o)$')
    9 
    107MAXSTRING=63
    118symtabfmt = "<Q%ds" % (MAXSTRING+1)
    129
    13 def read_symbols(inp):
    14     while 1:
    15         line = inp.readline()
    16         if not line:
    17             return
    18         if 'memory map' in line:
    19             break       
    2010
    21     symtable = {}
    22     filename = ''
    23     while 1:
    24         line = inp.readline()
    25         if not line.strip():
     11objline = re.compile(r'([0-9a-f]+)\s+[lg]\s+F\s+\.text\s+[0-9a-f]+\s+(.*)$')
     12fileexp = re.compile(r'([^\s]+):\s+file format')
     13def read_obdump(inp):
     14    result = {}
     15    fname = ''
     16    for line in inp:
     17        line = line.strip()
     18        res = objline.match(line)
     19        if res:
     20            result.setdefault(fname,[]).append((int(res.group(1),16),
     21                                                 res.group(2)))
     22        res = fileexp.match(line)
     23        if res:
     24            fname = res.group(1)
    2625            continue
    27         if line[0] not in (' ','.'):
    28             break
     26   
     27    return result
     28
     29startfile = re.compile(r'\.text\s+(0x[0-9a-f]+)\s+0x[0-9a-f]+\s+(.*)$')
     30def generate(kmapf, obmapf, out):
     31    obdump = read_obdump(obmapf)
     32
     33    def sorter(x,y):
     34        return cmp(x[0],y[0])
     35
     36    for line in kmapf:
    2937        line = line.strip()
    30         # Search for file name
    31         res = fileline.match(line)
    32         if res:
    33             filename = res.group(1)
    34         # Search for symbols
    35         res = symline.match(line)
    36         if res:
    37             symtable[int(res.group(1),16)] = filename + ':' + res.group(2)
    38     return symtable
    39    
    40 def generate(inp, out):
    41     symtab = read_symbols(inp)
    42     if not symtab:
    43         print "Bad kernel.map format, empty."
    44         sys.exit(1)
    45     addrs = symtab.keys()
    46     addrs.sort()
    47     for addr in addrs:
    48         # Do not write address 0, it indicates end of data
    49         if addr == 0:
    50             continue
    51         data = struct.pack(symtabfmt,addr,symtab[addr][:MAXSTRING])
    52         out.write(data)
     38        res = startfile.match(line)
     39        if res and obdump.has_key(res.group(2)):
     40            offset = int(res.group(1),16)
     41            fname = res.group(2)
     42            symbols = obdump[fname]
     43            symbols.sort(sorter)
     44            for addr,symbol in symbols:
     45                value = fname + ':' + symbol
     46                data = struct.pack(symtabfmt,addr+offset,value[:MAXSTRING])
     47                out.write(data)
     48               
    5349    out.write(struct.pack(symtabfmt,0,''))
    5450
    5551def main():
    56     if len(sys.argv) != 3:
    57         print "Usage: %s <kernel.map> <output.bin>" % sys.argv[0]
     52    if len(sys.argv) != 4:
     53        print "Usage: %s <kernel.map> <nm dump> <output.bin>" % sys.argv[0]
    5854        sys.exit(1)
    5955
    60     inp = open(sys.argv[1],'r')
    61     out = open(sys.argv[2],'w')
    62     generate(inp,out)
    63     inp.close()
     56    kmapf = open(sys.argv[1],'r')
     57    obmapf = open(sys.argv[2],'r')
     58    out = open(sys.argv[3],'w')
     59    generate(kmapf,obmapf,out)
     60    kmapf.close()
     61    obmapf.close()
    6462    out.close()
    6563
Note: See TracChangeset for help on using the changeset viewer.