36 lines
781 B
Plaintext
Executable File
36 lines
781 B
Plaintext
Executable File
#!/usr/bin/env kuroko
|
|
'''
|
|
@brief Generate symbol table.
|
|
'''
|
|
import fileio
|
|
|
|
let size = 'quad'
|
|
|
|
def extern(sym):
|
|
print(f'.extern {sym}')
|
|
print(f'.type {sym}, @function')
|
|
|
|
def entry(sym):
|
|
print(f'.{size} {sym}')
|
|
print(f'.asciz "{sym}"')
|
|
|
|
let ignore = ['abs','kernel_symbols_start','kernel_symbols_end','_GLOBAL_OFFSET_TABLE_']
|
|
let source = (x.strip() for x in fileio.stdin.readlines())
|
|
let symbols = set(x.split()[0] for x in source if not x.endswith(':'))
|
|
let lines = sorted(x for x in symbols if x not in ignore)
|
|
|
|
|
|
print('.section .symbols')
|
|
print()
|
|
for name in lines:
|
|
extern(name)
|
|
|
|
print('.global kernel_symbols_start')
|
|
print('kernel_symbols_start:')
|
|
print()
|
|
for name in lines:
|
|
entry(name)
|
|
|
|
print('.global kernel_symbols_end')
|
|
print('kernel_symbols_end:')
|