From e4b3ce2dd82ce2da85c37fd3f332ec2eb802b734 Mon Sep 17 00:00:00 2001 From: Matt Fleming Date: Tue, 4 Dec 2012 21:17:47 +0000 Subject: [PATCH] Symbol export whitelist Before modules were dynamically loaded the boundary between GPL and non-GPL code was implicit because of the separate link domains for each module. With dynamic modules we need an explicit whitelist of core symbols that non-GPL code can link against at runtime without needing to be re-licensed under the GPL. Mark such symbols with __export, so that it is explicitly clear which symbols in the core can be linked against by non-GPL code. Reduce the visibility of symbols in both the core and ldlinux.c32 with -fvisibility=hidden. __export changes the visibility to 'default'. Signed-off-by: Matt Fleming --- com32/elflink/ldlinux/Makefile | 3 ++- com32/elflink/ldlinux/adv.c | 4 ++-- com32/elflink/ldlinux/advwrite.c | 2 +- com32/elflink/ldlinux/execute.c | 2 +- com32/elflink/ldlinux/get_key.c | 2 +- com32/elflink/ldlinux/getadv.c | 2 +- com32/elflink/ldlinux/ldlinux.c | 6 +++--- com32/elflink/ldlinux/readconfig.c | 5 +++-- com32/elflink/ldlinux/setadv.c | 2 +- com32/include/klibc/compiler.h | 2 ++ core/call16.c | 5 +++-- core/callback.inc | 6 +++--- core/cleanup.c | 2 +- core/com32.inc | 2 +- core/comboot.inc | 4 ++-- core/conio.c | 22 +++++++++++----------- core/diskboot.inc | 5 ++++- core/diskfs.inc | 2 +- core/diskstart.inc | 4 ++-- core/elflink/load_env32.c | 4 ++-- core/font.c | 6 +++--- core/fs/chdir.c | 4 ++-- core/fs/fs.c | 16 ++++++++-------- core/fs/getcwd.c | 2 +- core/fs/lib/searchconfig.c | 4 ++-- core/fs/pxe/pxe.c | 2 +- core/fs/readdir.c | 6 +++--- core/graphics.c | 16 ++++++++-------- core/idle.c | 4 ++-- core/idle.inc | 4 ++-- core/init.c | 4 +++- core/kaboom.c | 2 +- core/layout.inc | 4 ++-- core/localboot.c | 2 +- core/localboot.inc | 2 +- core/mem/free.c | 2 +- core/mem/malloc.c | 8 ++++---- core/plaincon.c | 2 +- core/rawcon.c | 2 +- core/serirq.c | 4 ++-- core/stack.inc | 2 +- core/timer.inc | 8 ++++---- diag/geodsp/Makefile | 2 +- mk/embedded.mk | 1 + 44 files changed, 103 insertions(+), 92 deletions(-) diff --git a/com32/elflink/ldlinux/Makefile b/com32/elflink/ldlinux/Makefile index b4e5cfa..93ca127 100644 --- a/com32/elflink/ldlinux/Makefile +++ b/com32/elflink/ldlinux/Makefile @@ -14,7 +14,7 @@ topdir = ../../.. MAKEDIR = $(topdir)/mk include $(MAKEDIR)/elf.mk -CFLAGS += -I$(topdir)/core/elflink -I$(topdir)/core/include -I$(topdir)/com32/lib +CFLAGS += -I$(topdir)/core/elflink -I$(topdir)/core/include -I$(topdir)/com32/lib -fvisibility=hidden LIBS = --whole-archive $(com32)/lib/libcom32min.a all: ldlinux.c32 ldlinux_lnx.a @@ -24,6 +24,7 @@ ldlinux.c32 : ldlinux.o cli.o readconfig.o refstr.o colors.o getadv.o \ advwrite.o setadv.o eprintf.o loadhigh.o msg.o $(LD) $(LDFLAGS) -o $@ $^ $(LIBS) +LNXCFLAGS += -D__export='__attribute__((visibility("default")))' LNXLIBOBJS = get_key.lo ldlinux_lnx.a: $(LNXLIBOBJS) rm -f $@ diff --git a/com32/elflink/ldlinux/adv.c b/com32/elflink/ldlinux/adv.c index b81361f..4c3ad50 100644 --- a/com32/elflink/ldlinux/adv.c +++ b/com32/elflink/ldlinux/adv.c @@ -36,8 +36,8 @@ #include #include -void *__syslinux_adv_ptr; -size_t __syslinux_adv_size; +__export void *__syslinux_adv_ptr; +__export size_t __syslinux_adv_size; extern void adv_init(void); void __constructor __syslinux_init(void) diff --git a/com32/elflink/ldlinux/advwrite.c b/com32/elflink/ldlinux/advwrite.c index 4152eea..35829c1 100644 --- a/com32/elflink/ldlinux/advwrite.c +++ b/com32/elflink/ldlinux/advwrite.c @@ -35,7 +35,7 @@ #include #include -int syslinux_adv_write(void) +__export int syslinux_adv_write(void) { static com32sys_t reg; diff --git a/com32/elflink/ldlinux/execute.c b/com32/elflink/ldlinux/execute.c index 4b4faf8..bfb26ff 100644 --- a/com32/elflink/ldlinux/execute.c +++ b/com32/elflink/ldlinux/execute.c @@ -47,7 +47,7 @@ const struct image_types image_boot_types[] = { extern int create_args_and_load(char *); -void execute(const char *cmdline, uint32_t type) +__export void execute(const char *cmdline, uint32_t type) { const char *kernel, *args; const char *p; diff --git a/com32/elflink/ldlinux/get_key.c b/com32/elflink/ldlinux/get_key.c index 123171a..cece0f8 100644 --- a/com32/elflink/ldlinux/get_key.c +++ b/com32/elflink/ldlinux/get_key.c @@ -166,7 +166,7 @@ int raw_read(int fd, void *buf, size_t count) extern int raw_read(int fd, void *buf, size_t count); #endif -int get_key(FILE * f, clock_t timeout) +__export int get_key(FILE * f, clock_t timeout) { char buffer[KEY_MAXLEN]; int nc, rv; diff --git a/com32/elflink/ldlinux/getadv.c b/com32/elflink/ldlinux/getadv.c index 5578313..1c27f1b 100644 --- a/com32/elflink/ldlinux/getadv.c +++ b/com32/elflink/ldlinux/getadv.c @@ -36,7 +36,7 @@ #include #include -const void *syslinux_getadv(int tag, size_t * size) +__export const void *syslinux_getadv(int tag, size_t * size) { const uint8_t *p; size_t left; diff --git a/com32/elflink/ldlinux/ldlinux.c b/com32/elflink/ldlinux/ldlinux.c index 62db2f7..484ebe5 100644 --- a/com32/elflink/ldlinux/ldlinux.c +++ b/com32/elflink/ldlinux/ldlinux.c @@ -46,7 +46,7 @@ static inline const char *find_command(const char *str) return p; } -uint32_t parse_image_type(const char *kernel) +__export uint32_t parse_image_type(const char *kernel) { const struct file_ext *ext; const char *p; @@ -141,7 +141,7 @@ const char *apply_extension(const char *kernel, const char *ext) * the the kernel. If we return the caller should call enter_cmdline() * so that the user can help us out. */ -void load_kernel(const char *command_line) +__export void load_kernel(const char *command_line) { struct menu_entry *me; const char *cmdline; @@ -278,7 +278,7 @@ void ldlinux_console_init(void) openconsole(&dev_stdcon_r, &dev_ansiserial_w); } -int main(int argc __unused, char **argv __unused) +__export int main(int argc __unused, char **argv __unused) { const void *adv; const char *cmdline; diff --git a/com32/elflink/ldlinux/readconfig.c b/com32/elflink/ldlinux/readconfig.c index 7411fca..6a419c6 100644 --- a/com32/elflink/ldlinux/readconfig.c +++ b/com32/elflink/ldlinux/readconfig.c @@ -82,10 +82,11 @@ short vkernel = 0; //have we seen any "label" statements? short displaycon = 1; //conio.inc extern short NoHalt; //idle.c -const char *default_cmd = NULL; //"default" command line const char *onerror = NULL; //"onerror" command line const char *ontimeout = NULL; //"ontimeout" command line +__export const char *default_cmd = NULL; //"default" command line + /* Empty refstring */ const char *empty_string; @@ -599,7 +600,7 @@ uint32_t parse_argb(char **p) //static const char *append = NULL; extern const char *append; //static unsigned int ipappend = 0; -unsigned int ipappend = 0; +__export unsigned int ipappend = 0; extern uint16_t PXERetry; static struct labeldata ld; diff --git a/com32/elflink/ldlinux/setadv.c b/com32/elflink/ldlinux/setadv.c index 40f00a4..2e38621 100644 --- a/com32/elflink/ldlinux/setadv.c +++ b/com32/elflink/ldlinux/setadv.c @@ -45,7 +45,7 @@ #include #include -int syslinux_setadv(int tag, size_t size, const void *data) +__export int syslinux_setadv(int tag, size_t size, const void *data) { uint8_t *p, *advtmp; size_t rleft, left; diff --git a/com32/include/klibc/compiler.h b/com32/include/klibc/compiler.h index 210971f..e8548b5 100644 --- a/com32/include/klibc/compiler.h +++ b/com32/include/klibc/compiler.h @@ -139,4 +139,6 @@ /* Weak symbols */ #define __weak __attribute__((weak)) +#define __export __attribute__((visibility("default"))) + #endif diff --git a/core/call16.c b/core/call16.c index 095f814..3ef6690 100644 --- a/core/call16.c +++ b/core/call16.c @@ -20,7 +20,7 @@ #include #include "core.h" -const com32sys_t zero_regs; /* Common all-zero register set */ +__export const com32sys_t zero_regs; /* Common all-zero register set */ static inline uint32_t eflags(void) { @@ -30,7 +30,8 @@ static inline uint32_t eflags(void) return v; } -void call16(void (*func)(void), const com32sys_t *ireg, com32sys_t *oreg) +__export void call16(void (*func)(void), const com32sys_t *ireg, + com32sys_t *oreg) { com32sys_t xreg = *ireg; diff --git a/core/callback.inc b/core/callback.inc index d98d800..454b452 100644 --- a/core/callback.inc +++ b/core/callback.inc @@ -37,12 +37,12 @@ ; - Return segment (== real mode cs == 0) ; - Return flags ; - global core_farcall + global core_farcall:function hidden core_farcall: mov eax,[esp+1*4] ; CS:IP jmp core_syscall - global core_intcall + global core_intcall:function hidden core_intcall: movzx eax,byte [esp+1*4] ; INT number mov eax,[eax*4] ; Get CS:IP from low memory @@ -142,7 +142,7 @@ core_syscall: ; followed by the return CS:IP and the CS:IP of the target function. ; The value of IF is copied from the calling routine. ; - global core_cfarcall + global core_cfarcall:function hidden core_cfarcall: pushfd ; Save IF among other things... push ebx diff --git a/core/cleanup.c b/core/cleanup.c index 7bf1df2..73b63db 100644 --- a/core/cleanup.c +++ b/core/cleanup.c @@ -27,7 +27,7 @@ extern void comboot_cleanup_api(void); * * Shut down anything transient. */ -void cleanup_hardware(void) +__export void cleanup_hardware(void) { /* * TODO diff --git a/core/com32.inc b/core/com32.inc index 929f50e..9c565f1 100644 --- a/core/com32.inc +++ b/core/com32.inc @@ -40,7 +40,7 @@ com32_entry equ free_high_memory ; ; Danger, Will Robinson: it's not clear the use of ; core_xfer_buf is safe here. - global __entry_esp, __com32 + global __com32:data hidden alignz 4 __entry_esp: dd 0 ; Dummy to avoid _exit issues diff --git a/core/comboot.inc b/core/comboot.inc index 2e690ff..b11ae18 100644 --- a/core/comboot.inc +++ b/core/comboot.inc @@ -95,7 +95,7 @@ comboot_setup_api: ; Restore the original state of the COMBOOT API vectors, and free ; any low memory allocated by the comboot module. ; - global comboot_cleanup_api + global comboot_cleanup_api:function hidden comboot_cleanup_api: pusha mov si,DOSSaveVectors @@ -530,6 +530,6 @@ err_comlarge db 'COMBOOT image too large.', CR, LF, 0 DOSErrTramp resd 33 ; Error trampolines %ifndef HAVE_CURRENTDIRNAME - global CurrentDirName + global CurrentDirName:data hidden CurrentDirName resb FILENAME_MAX %endif diff --git a/core/conio.c b/core/conio.c index be7f7d4..abfceb8 100644 --- a/core/conio.c +++ b/core/conio.c @@ -37,21 +37,21 @@ union screen _screensize; /* * Serial console stuff. */ -uint16_t SerialPort = 0; /* Serial port base (or 0 for no serial port) */ -uint16_t BaudDivisor = 115200/9600; /* Baud rate divisor */ -uint8_t FlowOutput = 0; /* Output to assert for serial flow */ -uint8_t FlowInput = 0; /* Input bits for serial flow */ -uint8_t FlowIgnore = 0; /* Ignore input unless these bits set */ +__export uint16_t SerialPort = 0; /* Serial port base (or 0 for no serial port) */ +__export uint8_t FlowInput = 0; /* Input bits for serial flow */ +__export uint16_t BaudDivisor = 115200/9600; /* Baud rate divisor */ +__export uint8_t FlowIgnore = 0; /* Ignore input unless these bits set */ +__export uint16_t DisplayCon = 0x01; /* Display console enabled */ +__export uint8_t FlowOutput = 0; /* Output to assert for serial flow */ uint8_t ScrollAttribute = 0x07; /* Grey on white (normal text color) */ -uint16_t DisplayCon = 0x01; /* Display console enabled */ /* * loadkeys: Load a LILO-style keymap * * Returns 0 on success, or -1 on error. */ -int loadkeys(char *filename) +__export int loadkeys(char *filename) { FILE *f; @@ -69,7 +69,7 @@ int loadkeys(char *filename) * write_serial: If serial output is enabled, write character on * serial port. */ -void write_serial(char data) +__export void write_serial(char data) { if (!SerialPort) return; @@ -124,7 +124,7 @@ void pm_serialcfg(com32sys_t *regs) /* * write_serial_str: write_serial for strings */ -void write_serial_str(char *data) +__export void write_serial_str(char *data) { char ch; @@ -137,7 +137,7 @@ void write_serial_str(char *data) * * Returns 1 if character pending. */ -int pollchar(void) +__export int pollchar(void) { com32sys_t ireg, oreg; uint8_t data = 0; @@ -190,7 +190,7 @@ extern void do_idle(void); /* * getchar: Read a character from keyboard or serial port */ -char getchar(char *hi) +__export char getchar(char *hi) { com32sys_t ireg, oreg; unsigned char data; diff --git a/core/diskboot.inc b/core/diskboot.inc index 3e42044..89bdd96 100644 --- a/core/diskboot.inc +++ b/core/diskboot.inc @@ -103,7 +103,6 @@ superblock_len_fat32 equ $-superblock+54 zb 54 ; Maximum needed size superblock_max equ $-superblock - global SecPerClust SecPerClust equ bxSecPerClust ; @@ -385,7 +384,11 @@ getonesec_cbios: ; ; kaboom: write a message and bail out. ; +%ifdef BINFMT global kaboom +%else + global kaboom:function hidden +%endif disk_error: kaboom: xor si,si diff --git a/core/diskfs.inc b/core/diskfs.inc index 9c9da26..827f500 100644 --- a/core/diskfs.inc +++ b/core/diskfs.inc @@ -60,7 +60,7 @@ vk_end: equ $ ; Should be <= vk_size ; Memory below this point is reserved for the BIOS and the MBR ; section .earlybss - global trackbuf + global trackbuf:data hidden trackbufsize equ 8192 trackbuf resb trackbufsize ; Track buffer goes here ; ends at 2800h diff --git a/core/diskstart.inc b/core/diskstart.inc index 8806593..a2ede95 100644 --- a/core/diskstart.inc +++ b/core/diskstart.inc @@ -92,7 +92,7 @@ BannerPtr dw syslinux_banner - LDLINUX_SYS ; Base directory name and subvolume, if applicable. ; %define HAVE_CURRENTDIRNAME - global CurrentDirName, SubvolName + global CurrentDirName:data hidden, SubvolName:data hidden CurrentDirName times CURRENTDIR_MAX db 0 SubvolName times SUBVOL_MAX db 0 @@ -232,7 +232,7 @@ verify_checksum: ; ; This routine assumes CS == DS. ; - global getlinsec + global getlinsec:function hidden getlinsec: pushad add eax,[Hidden] ; Add partition offset diff --git a/core/elflink/load_env32.c b/core/elflink/load_env32.c index 4797b27..7c0afac 100644 --- a/core/elflink/load_env32.c +++ b/core/elflink/load_env32.c @@ -59,7 +59,7 @@ void init_module_subsystem(struct elf_module *module) list_add(&module->list, &modules_head); } -int start_ldlinux(char **argv) +__export int start_ldlinux(char **argv) { int rv; @@ -154,7 +154,7 @@ void load_env32(com32sys_t * regs __unused) writestr("\nFailed to load ldlinux.c32"); } -int create_args_and_load(char *cmdline) +__export int create_args_and_load(char *cmdline) { char *p, **argv; int argc; diff --git a/core/font.c b/core/font.c index 38f03f5..8533080 100644 --- a/core/font.c +++ b/core/font.c @@ -26,9 +26,9 @@ #include "graphics.h" #include "core.h" -uint8_t UserFont = 0; /* Using a user-specified font */ +__export uint8_t UserFont = 0; /* Using a user-specified font */ -__lowmem char fontbuf[8192]; +__export __lowmem char fontbuf[8192]; uint16_t GXPixCols = 1; /* Graphics mode pixel columns */ uint16_t GXPixRows = 1; /* Graphics mode pixel rows */ @@ -37,7 +37,7 @@ uint16_t GXPixRows = 1; /* Graphics mode pixel rows */ * loadfont: Load a .psf font file and install it onto the VGA console * (if we're not on a VGA screen then ignore.) */ -void loadfont(const char *filename) +__export void loadfont(const char *filename) { struct psfheader { uint16_t magic; diff --git a/core/fs/chdir.c b/core/fs/chdir.c index 903cabc..5d3a545 100644 --- a/core/fs/chdir.c +++ b/core/fs/chdir.c @@ -54,7 +54,7 @@ static size_t generic_inode_to_path(struct inode *inode, char *dst, size_t bufsi return s; } -size_t realpath(char *dst, const char *src, size_t bufsize) +__export size_t realpath(char *dst, const char *src, size_t bufsize) { int rv; struct file *file; @@ -83,7 +83,7 @@ size_t realpath(char *dst, const char *src, size_t bufsize) return s; } -int chdir(const char *src) +__export int chdir(const char *src) { int rv; struct file *file; diff --git a/core/fs/fs.c b/core/fs/fs.c index c85e132..2ad3375 100644 --- a/core/fs/fs.c +++ b/core/fs/fs.c @@ -9,13 +9,13 @@ #include "fs.h" #include "cache.h" -char *PATH; +__export char *PATH; /* The currently mounted filesystem */ -struct fs_info *this_fs = NULL; /* Root filesystem */ +__export struct fs_info *this_fs = NULL; /* Root filesystem */ /* Actual file structures (we don't have malloc yet...) */ -struct file files[MAX_OPEN]; +__export struct file files[MAX_OPEN]; /* Symlink hard limits */ #define MAX_SYMLINK_CNT 20 @@ -74,7 +74,7 @@ static inline void free_file(struct file *file) memset(file, 0, sizeof *file); } -void _close_file(struct file *file) +__export void _close_file(struct file *file) { if (file->fs) file->fs->fs_ops->close_file(file); @@ -84,7 +84,7 @@ void _close_file(struct file *file) /* * Find and open the configuration file */ -int open_config(void) +__export int open_config(void) { int fd, handle; struct file_info *fp; @@ -116,7 +116,7 @@ void pm_mangle_name(com32sys_t *regs) mangle_name(dst, src); } -void mangle_name(char *dst, const char *src) +__export void mangle_name(char *dst, const char *src) { this_fs->fs_ops->mangle_name(dst, src); } @@ -415,7 +415,7 @@ err_no_close: return -1; } -int open_file(const char *name, struct com32_filedata *filedata) +__export int open_file(const char *name, struct com32_filedata *filedata) { int rv; struct file *file; @@ -465,7 +465,7 @@ void pm_open_file(com32sys_t *regs) } } -void close_file(uint16_t handle) +__export void close_file(uint16_t handle) { struct file *file; diff --git a/core/fs/getcwd.c b/core/fs/getcwd.c index ee62411..70b9315 100644 --- a/core/fs/getcwd.c +++ b/core/fs/getcwd.c @@ -1,7 +1,7 @@ #include #include "fs.h" -char *core_getcwd(char *buf, size_t size) +__export char *core_getcwd(char *buf, size_t size) { char *ret = NULL; diff --git a/core/fs/lib/searchconfig.c b/core/fs/lib/searchconfig.c index f2d740b..b2a964e 100644 --- a/core/fs/lib/searchconfig.c +++ b/core/fs/lib/searchconfig.c @@ -4,8 +4,8 @@ #include #include -char ConfigName[FILENAME_MAX]; -char config_cwd[FILENAME_MAX]; +__export char ConfigName[FILENAME_MAX]; +__export char config_cwd[FILENAME_MAX]; /* * This searches for a specified set of filenames in a specified set diff --git a/core/fs/pxe/pxe.c b/core/fs/pxe/pxe.c index ee818ec..1127004 100644 --- a/core/fs/pxe/pxe.c +++ b/core/fs/pxe/pxe.c @@ -645,7 +645,7 @@ static uint32_t pxe_getfssec(struct file *file, char *buf, * */ static void __pxe_searchdir(const char *filename, struct file *file); -uint16_t PXERetry; +extern uint16_t PXERetry; static void pxe_searchdir(const char *filename, struct file *file) { diff --git a/core/fs/readdir.c b/core/fs/readdir.c index d071aff..e2d593f 100644 --- a/core/fs/readdir.c +++ b/core/fs/readdir.c @@ -7,7 +7,7 @@ /* * Open a directory */ -DIR *opendir(const char *path) +__export DIR *opendir(const char *path) { int rv; struct file *file; @@ -29,7 +29,7 @@ DIR *opendir(const char *path) /* * Read one directory entry at one time. */ -struct dirent *readdir(DIR *dir) +__export struct dirent *readdir(DIR *dir) { static struct dirent buf; struct file *dd_dir = (struct file *)dir; @@ -47,7 +47,7 @@ struct dirent *readdir(DIR *dir) /* * Close a directory */ -int closedir(DIR *dir) +__export int closedir(DIR *dir) { struct file *dd_dir = (struct file *)dir; _close_file(dd_dir); diff --git a/core/graphics.c b/core/graphics.c index 55d91d7..834372f 100644 --- a/core/graphics.c +++ b/core/graphics.c @@ -25,13 +25,13 @@ #include "bios.h" #include "graphics.h" -uint8_t UsingVGA = 0; +__export uint8_t UsingVGA = 0; uint16_t VGAPos; /* Pointer into VGA memory */ -uint16_t *VGAFilePtr; /* Pointer into VGAFileBuf */ -uint16_t VGAFontSize = 16; /* Defaults to 16 byte font */ +__export uint16_t *VGAFilePtr; /* Pointer into VGAFileBuf */ +__export uint16_t VGAFontSize = 16; /* Defaults to 16 byte font */ -char VGAFileBuf[VGA_FILE_BUF_SIZE]; /* Unmangled VGA image name */ -char VGAFileMBuf[FILENAME_MAX]; /* Mangled VGA image name */ +__export char VGAFileBuf[VGA_FILE_BUF_SIZE]; /* Unmangled VGA image name */ +__export char VGAFileMBuf[FILENAME_MAX]; /* Mangled VGA image name */ static uint8_t VGARowBuffer[640 + 80]; /* Decompression buffer */ static uint8_t VGAPlaneBuffer[(640/8) * 4]; /* Plane buffers */ @@ -230,7 +230,7 @@ static void outputvga(const void *in, void *out) /* * Display a graphical splash screen. */ -void vgadisplayfile(FILE *_fd) +__export void vgadisplayfile(FILE *_fd) { char *p; int size; @@ -305,7 +305,7 @@ void vgadisplayfile(FILE *_fd) /* * Disable VGA graphics. */ -void syslinux_force_text_mode(void) +__export void syslinux_force_text_mode(void) { com32sys_t ireg, oreg; @@ -357,7 +357,7 @@ void vgashowcursor(void) vgacursorcommon('_'); } -void using_vga(uint8_t vga, uint16_t pix_cols, uint16_t pix_rows) +__export void using_vga(uint8_t vga, uint16_t pix_cols, uint16_t pix_rows) { UsingVGA = vga; GXPixCols = pix_cols; diff --git a/core/idle.c b/core/idle.c index 137e0ea..9514df8 100644 --- a/core/idle.c +++ b/core/idle.c @@ -25,7 +25,7 @@ #define TICKS_TO_IDLE 4 /* Also in idle.inc */ extern uint32_t _IdleTimer; -uint16_t NoHalt = 0; +__export uint16_t NoHalt = 0; int (*idle_hook_func)(void); @@ -34,7 +34,7 @@ void reset_idle(void) _IdleTimer = jiffies(); } -void __idle(void) +__export void __idle(void) { if (jiffies() - _IdleTimer < TICKS_TO_IDLE) return; diff --git a/core/idle.inc b/core/idle.inc index 09a3771..65d6c5c 100644 --- a/core/idle.inc +++ b/core/idle.inc @@ -22,7 +22,7 @@ reset_idle: sti ; Guard against BIOS/PXE brokenness... ret - global do_idle + global do_idle:function hidden do_idle: push eax push ds @@ -72,7 +72,7 @@ do_idle: section .data16 alignz 4 - global _IdleTimer + global _IdleTimer:data hidden _IdleTimer dd 0 hlt_err db 'ERROR: idle with IF=0', CR, LF, 0 diff --git a/core/init.c b/core/init.c index ca9e413..a141225 100644 --- a/core/init.c +++ b/core/init.c @@ -7,7 +7,9 @@ static uint32_t min_lowmem_heap = 65536; extern char __lowmem_heap[]; uint8_t KbdFlags; /* Check for keyboard escapes */ -uint8_t KbdMap[256]; /* Keyboard map */ +__export uint8_t KbdMap[256]; /* Keyboard map */ + +__export uint16_t PXERetry; static inline void check_escapes(void) { diff --git a/core/kaboom.c b/core/kaboom.c index 9bb3073..03dd917 100644 --- a/core/kaboom.c +++ b/core/kaboom.c @@ -18,7 +18,7 @@ __noreturn __bad_SEG(const volatile void *p) #undef kaboom -__noreturn _kaboom(void) +__export __noreturn _kaboom(void) { extern void kaboom(void); call16(kaboom, &zero_regs, NULL); diff --git a/core/layout.inc b/core/layout.inc index 6d31b18..be797ed 100644 --- a/core/layout.inc +++ b/core/layout.inc @@ -134,7 +134,7 @@ serial_buf_size equ 4096 ; Should be a power of 2 ; extern xfer_buf_seg section .xfer_buf write nobits align=65536 - global core_xfer_buf + global core_xfer_buf:data hidden core_xfer_buf resb 65536 ; @@ -144,7 +144,7 @@ core_xfer_buf resb 65536 ; extern real_mode_seg section .real_mode write nobits align=65536 - global core_real_mode + global core_real_mode:data hidden core_real_mode resb 65536 comboot_seg equ real_mode_seg ; COMBOOT image loading zone diff --git a/core/localboot.c b/core/localboot.c index 03ac866..0f4b582 100644 --- a/core/localboot.c +++ b/core/localboot.c @@ -34,7 +34,7 @@ extern void local_boot16(void); * Boot a specified local disk. AX specifies the BIOS disk number; or * -1 in case we should execute INT 18h ("next device.") */ -void local_boot(int16_t ax) +__export void local_boot(int16_t ax) { com32sys_t ireg, oreg; int i; diff --git a/core/localboot.inc b/core/localboot.inc index ce971ae..b784042 100644 --- a/core/localboot.inc +++ b/core/localboot.inc @@ -1,5 +1,5 @@ section .text16 - global local_boot16 + global local_boot16:function hidden local_boot16: mov cx,0 mov ss,cx diff --git a/core/mem/free.c b/core/mem/free.c index 2908943..9c28e14 100644 --- a/core/mem/free.c +++ b/core/mem/free.c @@ -66,7 +66,7 @@ __free_block(struct free_arena_header *ah) return ah; } -void free(void *ptr) +__export void free(void *ptr) { struct free_arena_header *ah; diff --git a/core/mem/malloc.c b/core/mem/malloc.c index 1968172..02e6061 100644 --- a/core/mem/malloc.c +++ b/core/mem/malloc.c @@ -86,12 +86,12 @@ static void *_malloc(size_t size, enum heap heap, malloc_tag_t tag) return p; } -void *malloc(size_t size) +__export void *malloc(size_t size) { return _malloc(size, HEAP_MAIN, MALLOC_CORE); } -void *lmalloc(size_t size) +__export void *lmalloc(size_t size) { void *p; @@ -106,7 +106,7 @@ void *pmapi_lmalloc(size_t size) return _malloc(size, HEAP_LOWMEM, MALLOC_MODULE); } -void *realloc(void *ptr, size_t size) +__export void *realloc(void *ptr, size_t size) { struct free_arena_header *ah, *nah; struct free_arena_header *head; @@ -207,7 +207,7 @@ void *realloc(void *ptr, size_t size) } } -void *zalloc(size_t size) +__export void *zalloc(size_t size) { void *ptr; diff --git a/core/plaincon.c b/core/plaincon.c index dfeb978..8f8ca7c 100644 --- a/core/plaincon.c +++ b/core/plaincon.c @@ -9,7 +9,7 @@ * Write a single character in AL to the console without * mangling any registers; handle video pages correctly. */ -void writechr(char data) +__export void writechr(char data) { com32sys_t ireg, oreg; diff --git a/core/rawcon.c b/core/rawcon.c index 1a52c95..92f0898 100644 --- a/core/rawcon.c +++ b/core/rawcon.c @@ -10,7 +10,7 @@ #include "bios.h" #include "graphics.h" -void writechr(char data) +__export void writechr(char data) { if (UsingVGA & 0x08) syslinux_force_text_mode(); diff --git a/core/serirq.c b/core/serirq.c index e0675c9..e230b98 100644 --- a/core/serirq.c +++ b/core/serirq.c @@ -123,7 +123,7 @@ static inline void install_irq_vectors(uint32_t *dst, int first) } } -void sirq_install(void) +__export void sirq_install(void) { char val, val2; @@ -164,7 +164,7 @@ void sirq_install(void) outb(0xA1, 0); } -void sirq_cleanup_nowipe(void) +__export void sirq_cleanup_nowipe(void) { uint32_t *dst; int i; diff --git a/core/stack.inc b/core/stack.inc index 788db64..838d6ba 100644 --- a/core/stack.inc +++ b/core/stack.inc @@ -38,7 +38,7 @@ section .data16 alignz 4 - global BaseStack + global BaseStack:data hidden BaseStack dd StackHome ; ESP of the "home" stack pointer dw 0 ; SS of the "home" stack pointer diff --git a/core/timer.inc b/core/timer.inc index 2bf0a21..64f81a7 100644 --- a/core/timer.inc +++ b/core/timer.inc @@ -32,7 +32,7 @@ timer_init: mov dword [BIOS_timer_hook],timer_irq ret - global timer_cleanup + global timer_cleanup:function hidden timer_cleanup: ; Unhook INT 1Ch mov eax,[BIOS_timer_next] @@ -43,18 +43,18 @@ timer_cleanup: ; The specified frequency is 14.31818 MHz/12/65536; this turns out ; to be a period of 54.92542 ms, or 0x36.ece8(187c) hexadecimal. ; - global timer_irq + global timer_irq:function hidden timer_irq: inc dword [cs:__jiffies] add word [cs:__ms_timer_adj],0xece8 adc dword [cs:__ms_timer],0x36 jmp 0:0 - global BIOS_timer_next + global BIOS_timer_next:data hidden BIOS_timer_next equ $-4 section .data16 alignz 4 - global __jiffies, __ms_timer + global __jiffies:data hidden, __ms_timer __jiffies dd 0 ; Clock tick timer __ms_timer dd 0 ; Millisecond timer __ms_timer_adj dw 0 ; Millisecond timer correction factor diff --git a/diag/geodsp/Makefile b/diag/geodsp/Makefile index 5516085..91225b1 100644 --- a/diag/geodsp/Makefile +++ b/diag/geodsp/Makefile @@ -26,7 +26,7 @@ coredir = $(topdir)/core BTARGET = geodsp1s.bin geodspms.bin \ geodsp1s.img.xz geodspms.img.xz -NASMOPT = -i $(coredir)/ -Ox -f bin +NASMOPT = -i $(coredir)/ -Ox -f bin -dBINFMT NASMOPT += -w+orphan-labels CFLAGS = -g -O diff --git a/mk/embedded.mk b/mk/embedded.mk index e8f3ae3..c2f4edf 100644 --- a/mk/embedded.mk +++ b/mk/embedded.mk @@ -32,6 +32,7 @@ GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0) GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0) GCCOPT += $(call gcc_ok,-mpreferred-stack-boundary=2,) GCCOPT += $(call gcc_ok,-mincoming-stack-boundary=2,) +GCCOPT += $(call gcc_ok,-fvisibility=hidden) LIBGCC := $(shell $(CC) $(GCCOPT) --print-libgcc) -- 2.7.4