toaruos/util/gensym.krk
2023-11-10 15:40:41 +09:00

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:')